Gav*_*ler 19 sql-server indexing optimization performance
我正在尝试优化查找历史数据的查询.我正在使用查询分析器来查找执行计划,并发现我的大部分查询成本都在称为"书签查找".我以前从未在执行计划中看过这个节点,也不知道它的含义.
这在查询中是好事还是坏事?
mar*_*c_s 31
书签查找是基于非聚集索引中的条目查找SQL表中的实际数据的过程.
当您在非聚集索引中搜索值时,并且您的查询需要的字段多于索引叶节点的一部分(所有索引字段以及任何可能的INCLUDE列),则SQL Server需要检索实际数据page(s) - 这就是所谓的书签查找.
在某些情况下,这真的是唯一的方法 - 只有当你的查询只需要一个字段(而不是一大堆')时,在非聚集索引中包含该字段可能是个好主意.在这种情况下,非聚集索引的叶级节点将包含满足查询所需的所有字段("覆盖"索引),因此不再需要书签查找.
渣
它NESTED LOOP
是在行指针上将非聚集索引与表本身连接起来的。
发生这样的查询:
SELECT col1
FROM table
WHERE col2 BETWEEN 1 AND 10
Run Code Online (Sandbox Code Playgroud)
,如果您在 上有索引col2
。
上的索引col2
包含指向索引行的指针。
因此,为了检索 的值col1
,引擎需要扫描索引上col2
的键值从1
到10
,并且对于每个索引叶,使用包含在叶中的指针引用表本身,以找出 的值col1
.
这篇文章指出aBookmark Lookup
是SQL Server 2000
's term,NESTED LOOP
在索引SQL Server 2005
和上面的表之间用's代替