Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用最新的SQL Server 2005/2008 jdbc驱动程序时,准备好的语句、视图和存储过程在性能方面如何比较?_Java_Sql_Sql Server 2005_Performance_Jdbc - Fatal编程技术网

Java 使用最新的SQL Server 2005/2008 jdbc驱动程序时,准备好的语句、视图和存储过程在性能方面如何比较?

Java 使用最新的SQL Server 2005/2008 jdbc驱动程序时,准备好的语句、视图和存储过程在性能方面如何比较?,java,sql,sql-server-2005,performance,jdbc,Java,Sql,Sql Server 2005,Performance,Jdbc,在使用针对SQL Server 2005/2008的最新Microsoft jdbc驱动程序时,准备好的语句、视图和存储过程在性能方面如何比较 如果我有一个普通的老select语句和一些动态where子句,我会看到从准备好的语句中的纯SQL迁移到视图甚至存储过程的好处吗 更具体地说,像这样的东西怎么样: select foo.name, bar.name, baz.name, belch.burp from foo inner join bar on foo.id=bar.fooID inne

在使用针对SQL Server 2005/2008的最新Microsoft jdbc驱动程序时,准备好的语句、视图和存储过程在性能方面如何比较

如果我有一个普通的老select语句和一些动态where子句,我会看到从准备好的语句中的纯SQL迁移到视图甚至存储过程的好处吗

更具体地说,像这样的东西怎么样:

select foo.name, bar.name, baz.name, belch.burp
from foo 
inner join bar on foo.id=bar.fooID
inner join baz on bar.id=baz.barID
inner join belch on baz.id = belch.bazID
where foo.name like '%<USERINPUT>%' and bar.name like '%<USERINPUT>%'
选择foo.name、bar.name、baz.name、belch.burp
来自富
foo.id=bar.fooID上的内部连接栏
杆上的内部连接baz.id=baz.barID
baz.id上的内部连接打嗝=打嗝.bazID
其中foo.name类似于“%”,bar.name类似于“%”

取决于sql和您的应用程序。我不相信有一个一概而论的答案,这可能不取决于司机


如果您可以选择编写一个将大量数据返回中间层的查询来执行数据库可以轻松执行的操作,我建议让数据库进行计算,然后简单地返回结果。

由于SP的缓存执行计划,您不太可能看到显着的性能差异,as执行计划也缓存在SQLServer2005中,甚至对于临时SQL也是如此

如果参数嗅探由于对某些参数值的基数估计错误而对性能产生不利影响,则可以与重新编译指示符一起使用

视图和存储过程的好处将体现在安全性和维护方面,在这里,这些好处可能太多,无法一一列举,但包括以下功能:

限制从SELECT语句读取受保护的数据,而不必为基础表分配单独的列权限

从其他SQL代码和应用程序中的多个位置重新使用参数化SP

在不影响或重新部署应用程序代码的情况下,将应用程序SP作为系统的命名数据库接口组件进行检测、记录、配置和调优

重构数据库而不影响或重新部署应用程序代码


提供一个抽象层和与数据库的接口合同,该合同使系统所需和提供的数据库服务具有良好的可视性,其中可能包括自动生成关于接口的元数据的可能性,一个可以进行自动测试的独立层,这也可以作为后端可移植性的分界点。

这样的语句永远不会有好的性能,无论您以何种方式将其表示为类似语句,其中通配符作为第一个字符,这意味着索引不会用于该字段。坦率地说,我们一直坚持我们的用户必须键入至少第一个字符来进行搜索。如果您的数据不知道第一个字符,则可能存在设计错误和规范化问题(在一个字段中存储多个信息位)。除了重新设计数据库之外,没有什么好的解决办法