java - 使用 SQL Server 2005/2008 的最新 jdbc 驱动程序时,准备好的语句、 View 和存储过程的性能比较如何?

标签 java sql sql-server-2005 performance jdbc

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

如果我有一个带有一些动态 where 子句的普通旧式 select 语句,我会看到从准备好的语句中的直接 SQL 迁移到 View 甚至存储过程的好处吗?

更具体地说,像这样的事情怎么样:

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>%'

最佳答案

由于 SP 的缓存执行计划,您不太可能看到显着的性能差异,因为执行计划也缓存在 SQL Server 2005 及更高版本中,甚至对于 ad hoc SQL 也是如此。

如果参数嗅探由于对某些参数值的基数估计错误而对性能产生不利影响,您可以使用WITH RECOMPILE 指示器。

View 和存储过程的好处将体现在安全和维护领域,这些好处可能太多,无法在此详尽介绍,但包括以下功能:

限制从 SELECT 语句读取 protected 数据,而无需在基础表上分配单独的列权限。

重复使用来自其他 SQL 代码和应用程​​序内多个位置的参数化 SP。

将应用程序 SP 作为系统的指定数据库接口(interface)组件进行检测、记录、分析和调整,而不会影响或重新部署应用程序代码。

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

提供一个抽象层和与数据库的接口(interface)契约,可以很好地了解系统所需和提供的数据库服务,其中可能包括自动生成有关接口(interface)的元数据的可能性,这是一个可以进行自动测试的单独层,也可以用作后端可移植性的分界点。

关于java - 使用 SQL Server 2005/2008 的最新 jdbc 驱动程序时,准备好的语句、 View 和存储过程的性能比较如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/400881/

相关文章:

java - ElasticSearch 命中没有字段

sql - 交换同一列的值

java - SQL Date&Time 和 java Date&Time 之间的区别,应该使用哪个?

如何使用Java创建一个内存泄漏的程序

java - 在RecyclerView-AndroidX中的项目之间添加不同的布局

SQL(Mysql)命令问题

sql - SQL 语句中的动态别名

sql-server-2005 - SQL Server 中的唯一 key 违规 - 假设出现错误 2627 是否安全?

Java 双端队列/准备语句内存泄漏

mysql - 在 MYSQL 中连接两个或多个不同的表