什么是Sql Server中的书签查找?

Gav*_*ler 19 sql-server indexing optimization performance

我正在尝试优化查找历史数据的查询.我正在使用查询分析器来查找执行计划,并发现我的大部分查询成本都在称为"书签查找".我以前从未在执行计划中看过这个节点,也不知道它的含义.

这在查询中是好事还是坏事?

mar*_*c_s 31

书签查找是基于非聚集索引中的条目查找SQL表中的实际数据的过程.

当您在非聚集索引中搜索值时,并且您的查询需要的字段多于索引叶节点的一部分(所有索引字段以及任何可能的INCLUDE列),则SQL Server需要检索实际数据page(s) - 这就是所谓的书签查找.

在某些情况下,这真的是唯一的方法 - 只有当你的查询只需要一个字段(而不是一大堆')时,在非聚集索引中包含该字段可能是个好主意.在这种情况下,非聚集索引的叶级节点将包含满足查询所需的所有字段("覆盖"索引),因此不再需要书签查找.

  • 同意.如果返回表的大部分,则最好只进行表扫描,但如果统计数据很差,则可能会得到一个执行书签查找的计划.redgate的执行计划有一本相当不错的免费电子书 - http://www.red-gate.com/specials/Grant.htm (3认同)

Qua*_*noi 5

NESTED LOOP是在行指针上将非聚集索引与表本身连接起来的。

发生这样的查询:

SELECT  col1
FROM    table
WHERE   col2 BETWEEN 1 AND 10
Run Code Online (Sandbox Code Playgroud)

,如果您在 上有索引col2

上的索引col2包含指向索引行的指针。

因此,为了检索 的值col1,引擎需要扫描索引上col2的键值从110,并且对于每个索引叶,使用包含在叶中的指针引用表本身,以找出 的值col1.

这篇文章指出aBookmark LookupSQL Server 2000's term,NESTED LOOP在索引SQL Server 2005和上面的表之间用's代替