我知道索引搜索优于索引扫描,但这在SQL Server解释计划中更为可取:索引搜索或密钥查找(SQL Server中的书签) 2000)?
请告诉我他们没有再为SQL Server 2008更改名称......
答案 0 :(得分:48)
每次索引寻找。
查找很昂贵,所以这是覆盖索引,特别是添加了INCLUDE子句以使它们更好。
如果您只想要一行,例如,查找后的查找可能比尝试覆盖查询更好。在某些情况下,我们依靠这个来避免另一个指数。
编辑:简单的谈话文章:Using Covering Indexes to Improve Query Performance
编辑,2012年8月
查找每行,这就是为什么它们会严重缩放的原因。最终,优化器将选择聚簇索引扫描而不是搜索+查找,因为它比许多查找更有效。
答案 1 :(得分:9)
Key lookup 非常类似于聚簇索引搜索(2005 SP2之前被命名为'seek with lookup')。我认为唯一的区别是Key Lookup可以指定一个额外的PRE-FETCH参数,指示执行引擎预取集群中的更多密钥(即执行聚簇索引搜索,然后进行扫描)。
看密钥查找不应该吓到你。是嵌套循环中使用的常规运算符,嵌套循环是一般运算连接运算符。如果要改进计划,请尝试改进连接并查看它是否可以使用合并连接(即,连接的两端可以提供相同键顺序的行,最快的连接)或散列连接(足够QO考虑散列连接的内存,或者通过在连接之前而不是之后过滤行来减少基数。
答案 2 :(得分:2)
This SO question提到密钥查找是要避免的。指数寻求肯定会是表现更好的操作。