SQL SERVER的执行计划中,什么是RID查找 ?是否需要优化?

0
已邀请:
1

gogodiy - 天善智能数据库专家、Tableau爱好者 2015-10-23 回答

RID查找,又称书签查找,键查找,就是非聚集索引的RID先查询到聚集索引的键值,再根据这个键值查询到具体的记录。
缺点:
书签查找(键查找)要求索引页面访问之外的数据页面访问。访问两组页面增加了查询逻辑读操作次数。而且,如果页面不在内存中,书签查找(键查找)可能需要在磁盘上的一个随机(非顺序)I/O操作来从索引页面跳转到数据页面,还需要必要的CPU能力来汇集这一数据并执行必要的操作。

为了从非聚集索引中获益,查询应该请求相对少的行。
如果请求的行相对较多,那么在有聚集索引的情况下,尽量指定走聚集索引。
使用聚集索引和表扫描时不存在书签查找(RID查找、键查找)。

书签查找(RID查找、键查找)的起因:
如果查询的各部分(不只是选择列表)中引用的列不都包含在使用的非聚集索引中,就会发生书签查找(键查找)。

解决书签查找(RID查找、键查找)
使用一个聚集索引:有局限性,因为一个表只能有一个聚集索引。
使用一个覆盖索引:要么添加到索引列,要么INCLUDE包含这些列。推荐首选
使用聚集索引列作为SELECT子句的查询列。
 
使用索引联接:
如果覆盖索引变得非常宽,使用多个窄索引的索引连接也可以作为避免书签查找(RID查找、键查找)的一种技术。
优点:
    多个窄索引和宽的覆盖索引相比,可以为更大量的查询提供服务。
    窄索引比宽的覆盖索引需要的维护开销更小。

通常来说,可以先创建窄索引,看优化器是否利用了多个窄索引的索引连接。如果没有的话,那就是用覆盖索引,尽量少用复合索引。

如果一个表没有聚集索引,只有非聚集索引,那么在查询一个大的结果集时,表扫描比通过非聚集索引再通过书签查找(RID查找、键查找)性能更好。
 
 

要回复问题请先登录注册