1
我知道参数化查询的查询计划被缓存,但在什么级别?如果我放弃我的连接,是否会放弃查询计划?如果我使用了不同的命令对象,那么删除查询计划?由ODBC自动缓存参数化查询吗?
总之,我需要在我的应用程序中缓存哪些对象(如果有)来保留查询计划?
我知道参数化查询的查询计划被缓存,但在什么级别?如果我放弃我的连接,是否会放弃查询计划?如果我使用了不同的命令对象,那么删除查询计划?由ODBC自动缓存参数化查询吗?
总之,我需要在我的应用程序中缓存哪些对象(如果有)来保留查询计划?
查询计划由SQL Server本身进行缓存,并可跨多个不同的连接进行回收。
在MS SQL Server中,查询和参数签名都被哈希到定位的缓存计划。
这对变长参数很重要;如果您未指定VARCHAR参数的大小,则会根据所提供参数的实际长度为您选择它。这意味着参数长度变化的不同参数签名。而应该指定VARCHAR参数的长度,确保相同的参数签名,并允许计划回收。
您的客户端代码无需主动执行任何操作即可生效。