为什么这个SQL查询会进行密钥查找?

时间:2010-07-03 00:24:03

标签: sql sql-server query-optimization sql-execution-plan

我有一个表有一堆索引的用户。其中一个是AccountIdentifier列的唯一索引。

由于这是一个唯一索引,为什么除索引查找外还需要键查找?索引查找工具提示报告只返回一条记录。我也尝试将索引转换为“唯一键”类型。

alt text http://s3.amazonaws.com/brandonc.baconfile.com/pitchurs/tmp/capture_2.png

3 个答案:

答案 0 :(得分:17)

因为它正在选择*

它使用非聚集索引来定位行,然后需要去获取要返回的数据。

要避免bookmark lookup,您需要将非聚集索引作为覆盖索引(理想情况下,通过减少选择列表中的列数,但也可以通过向索引本身添加新列或{{} 3}})

如果表上有聚簇索引,则非聚簇索引中的行定位器将包含聚簇索引键,因此不需要书签查找来仅满足AccountIdentifier和聚簇索引列上的查询

答案 1 :(得分:13)

键查找并不意味着“查找键”,而是“根据键查找行”。

答案 2 :(得分:7)

有关密钥查找/书签查找的更多背景信息,请参阅这些文章和博客文章: