2011-10-10 31 views
1

我知道参数化查询的查询计划被缓存,但在什么级别?如果我放弃我的连接,是否会放弃查询计划?如果我使用了不同的命令对象,那么删除查询计划?由ODBC自动缓存参数化查询吗?

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

回答

3

查询计划由SQL Server本身进行缓存,并可跨多个不同的连接进行回收。

在MS SQL Server中,查询和参数签名都被哈希到定位的缓存计划。

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

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