参数化查询是否由ODBC自动缓存?

时间:2011-10-10 12:37:48

标签: sql sql-execution-plan

我理解参数化查询的查询计划是缓存的,但在什么级别?如果我删除我的连接,那么放弃查询计划?如果我使用不同的命令对象会丢弃查询计划吗?

简而言之,我需要在应用程序中缓存哪些对象(如果有)以保留查询计划?

1 个答案:

答案 0 :(得分:3)

查询计划由SQL Server本身缓存,可以在多个不同的连接中循环使用。

在MS SQL Server中,查询和参数签名都被散列为已定位的缓存计划。

这对于可变长度参数很重要;如果您没有指定VARCHAR参数的大小,则会根据所提供参数的实际长度为您选择它。这意味着参数长度变化的不同参数签名。相反,应该指定VARCHAR参数的长度,确保相同的参数签名,并允许计划回收。

您的客户端代码无需主动执行任何操作即可生效。