哪个更好:书签/密钥查找或索引扫描

我知道索引search比索引扫描要好,但在SQL Server解释计划中更可取:Index seek或Key Lookup(SQL Server 2000中的书签)?

请告诉我他们没有再次更改SQL Server 2008的名称…

索引寻求,每一次。

查找是昂贵的,所以这是覆盖索引,特别是添加了INCLUDE子句,使其更好。

例如,如果您期望只有一行,那么查找之后的查找可能比尝试覆盖查询更好。 我们依靠这个来避免在某些情况下的另一个索引。

编辑:简单的谈话文章: 使用覆盖索引来提高查询性能

编辑,2012年8月

查询每行发生这就是为什么他们缩放严重。 最终,优化器将select聚簇索引扫描,而不是查找+查找,因为它比许多查找效率更高。

密钥查找 非常类似于聚簇索引查找(2005年之前的SP2被命名为“查找查找”)。 我认为唯一的区别是Key Lookup可能会指定一个额外的PRE-FETCH参数,指示执行引擎在集群中预取更多的密钥(即执行聚簇索引查找,然后扫描)。

看到一个关键查找不应该吓倒你。 在嵌套循环中使用正常的操作符,而嵌套循环是普通的连接操作符(run-of-mill join)。 如果你想改进一个计划,试着改进连接,看看它是否可以使用一个合并连接(即连接的两边可以提供相同的键顺序,最快的连接行)或散列连接(有足够的为QO考虑散列连接的内存,或通过在连接之前而不是之后过滤行来降低基数)。

这个SO问题提到关键查找是要避免的。 索引search肯定是更好的执行操作。