SQL使计划可重用于变量。
当您使用变量时-它会编译查询而不会知道您将传递的实际值。即使在此
sql batch值也是已知的。 但是 它不需要为另一组传递参数重新编译查询。
因此,如果您对值进行硬编码-
DB将对其进行编译,以选择针对这些特定值优化的计划(例如,它猜测通过日期检查的预期行数)。这比使用变量“至少不会更糟”。但是DB需要为另一组硬编码的值重新编译它(因为查询的文本已更改),这需要时间,并且垃圾
compiledquery cache存储量会取代其他有用的查询。
作为:
有什么办法可以消除表扫描但仍然可以使用变量?(PS,它将转换为以@StartDate和@EndDate作为参数的存储过程)
我认为非聚集索引
b.col2可能是解决方案。此索引的键还可以包含b.pred作为代理键的一部分或包含(
with include(pred))。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)