暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

华为GaussDB T 四种索引扫描方式总结

原创 章芋文 2019-09-22
1348

索引快速全扫描(INDEX  FAST FULL SCAN)
      索引快速全扫描和索引全扫描极为类似,它也适用于所有类型的B+树索引(包括唯一性索引和非唯一性索引)。和索引全扫描一样,索引快速全扫描也需要扫描目标索引所有叶子块的所有索引行。 
    索引快速全扫描与索引全扫描相比有如下三点区别。
    a)索引快速全扫描只适用于CBO。
    b)索引快速全扫描可以使用多块读,也可以并行执行。
    c)因为索引快速全扫描是根据索引行在磁盘上的物理存储顺序来扫描,而不是根据索引树的指针顺序来扫描的,所以返回结果是无序的

索引全扫描(INDEX FULL SCAN)
    索引全扫描一般会扫描所有叶子节点。它从第一个叶子节点开始扫描,通过叶子节点的链接依次访问每一个叶子节点。 
    索引全扫描有以下几个特点: 
    a)由于叶子节点是有序的,所以扫描结果也是有序的。 
    b)由于叶子块之间是指针关联的,所以对叶子块只能使用单块读
    c)如果需要访问表,由于每一条数据都需要使用rowid访问,它的效率比全表扫描低的多。


索引范围扫描(INDEX   RANGE SCAN)
      索引范围扫描跟索引唯一扫描类似,从根节点一直扫描到叶子节点,每一层(不包括叶子节点)扫描一个索引块。它们的区别是,索引唯一扫描在叶子块里最多只能找到一条目标数据,而索引范围扫描可能找到N条目标数据(N>=0)。由此可见,索引唯一扫描实际是索引范围扫描的一个特例。
    只有第一次是从根节点下来的,后面的访问都是根据叶子块的指针来访问的。    


索引唯一扫描(INDEX UNIQUE SCAN)

当根据主键或唯一索引查询数据时,可以使用索引唯一扫描。这种查询的代价非常小,因为它最多从索引树中查出一条数据。索引唯一扫描在访问索引时最多访问的数据块数就是索引树的高度,而索引数一般不会超过4层,所以它的查询速度很快。
    从执行计划看,首先执行索引唯一扫描(INDEX UNIQUE SCAN),然后TABLE ACCESS BY INDEX   ROWID,这一步的含义是根据索引中的rowid访问表数据。最后是SELECT STATEMENT。
    PS:如果索引中包含要查询的所有数据,则不会ROWID,而是TABLE ACCESS BY INDEX ONLY。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论