你的位置:首页 > 软件开发 > 数据库 > Oracle索引梳理系列(八)

Oracle索引梳理系列(八)

发布时间:2016-10-20 12:00:18
版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载。转载时,请在文章明显位置注明原文链接。若在未经作者同意的情况下,将本文内容用于商业用途,将保留追究其法律责任的权利。如果有问题,请以邮箱方式联系作者(7 ...

版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载。转载时,请在文章明显位置注明原文链接。若在未经作者同意的情况下,将本文内容用于商业用途,将保留追究其法律责任的权利。如果有问题,请以邮箱方式联系作者(793113046@qq.com)。


 

理解oracle索引扫描类型的特点以及具体触发的条件,对于通过合理地使用索引,进行sql优化至关重要(例如组合索引的引导列的选择问题)

在总结索引扫描类型前,需要再次强调关于索引特点的几个关键点:

  • 对于单一列建立的索引,既单一列索引,b-tree中不保存索引列的null值信息
  • 对于多个列建立的索引,既组合列索引,b-tree中会连同其他非null值列,保留该列null值记录;对于一条记录中,组合索引全部列都是null值,组合索引中不会记录(从之前的实验看,此时的执行计划是全表扫描)
  • 创建主键约束以及唯一键约束,或自动创建唯一索引
  • create index创建的索引属于普通索引(非唯一索引)
  • create unique index创建的索引属于唯一索引

其他的一些特点,可参阅前面的几篇总结。

此外,为避免概念的混淆,再次说明一下:“索引类型”主要探讨的是索引的几种类别的问题,而“索引扫描类型”主要探讨的是索引扫描的几种具体实现方法的问题。

 

 

1、索引扫描类型概述

Oracle提供了五种索引扫描类型,根据具体索引类型、数据分布、约束条件以及where限制的不同进行选择: 

  • 索引唯一扫描(index unique scan)
  • 索引范围扫描(index range scan)
  • 索引跳跃扫描(index skip scan)
  • 索引全扫描(index full scan)
  • 索引快速扫描(index fast full scan)

 

 

2、索引唯一扫描(index unique scan) 

索引唯一扫描,仅仅针对唯一索引的扫描,且仅适用于等值(=)条件的查询。从结果集看,至多返回一条记录。

 

具体情况分析:

  • 对于单一列建立的索引(单一索引),当索引属于唯一索引,在检索条件中,使用该索引进行检索,且检索值不是null时,会使用“索引唯一扫描”
  • 对于单一列建立的索引(单一索引),当索引属于唯一索引,在检索条件中,使用该索引进行检索,且检索值等于null时,会使用“全表扫描”
  • 对于多个列建立的索引(组合索引),当索引属于唯一索引,且检索条件中,使用该组合索引进行检索,且检索列使用组合索引涉及的所有列时,会使用“索引唯一扫描”

 

需要注意:

  • 对于组合索引,若其中涉及的部分列或则所有列,在同一条记录上存在null值。当使用完整的组合索引列作为检索条件,且使用该null值进行该条记录的检索时,不会使用“索引唯一扫描”

 

示例:

--创建唯一索引

原标题:Oracle索引梳理系列(八)

关键词:oracle

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录