我理解参数化查询的查询计划是缓存的,但在什么级别?如果我删除我的连接,那么放弃查询计划?如果我使用不同的命令对象会丢弃查询计划吗?
简而言之,我需要在应用程序中缓存哪些对象(如果有)以保留查询计划?
答案 0 :(得分:3)
查询计划由SQL Server本身缓存,可以在多个不同的连接中循环使用。
在MS SQL Server中,查询和参数签名都被散列为已定位的缓存计划。
这对于可变长度参数很重要;如果您没有指定VARCHAR参数的大小,则会根据所提供参数的实际长度为您选择它。这意味着参数长度变化的不同参数签名。相反,应该指定VARCHAR参数的长度,确保相同的参数签名,并允许计划回收。
您的客户端代码无需主动执行任何操作即可生效。