索引扫描类型(该表取自网络文章):

index unique scan(索引唯一扫描)通过唯一索引查找一个数值经常返回单个ROWID。如果该唯一索引有多个列组成(即组合索引),则至少要有组合索引的引导列参与到该查询中,如创建一个索引:create index idx_test on emp(ename, deptno, loc)。则select ename from emp where ename = ‘JACK’ and deptno = ‘DEV’语句可以使用该索引。如果该语句只返回一行,则存取方法称为索引唯一扫描。而select ename from emp where deptno = ‘DEV’语句则不会使用该索引,因为where子句种没有引导列。如果存在UNIQUE 或PRIMARY KEY 约束(它保证了语句只存取单行)的话,Oracle经常实现唯一性扫描。

index range scan(索引范围扫描):1.对于unique index来说,如果where 条件后面出现了 ,between ...and...的时候,那么就可能执行index range scan,如果where条件后面是=,那么就会执行index unique scan。

2.对于none unique index来说 如果where 条件后面出现了=,>, 3.对于组合索引来说,如果where条件后面出现了组合索引的引导列,那么可能执行index range scan。

index full scan(索引全扫描)与全表扫描对应,也有相应的全Oracle索引扫描。在某些情况下,可能进行全Oracle索引扫描而不是范围扫描,需要注意的是全Oracle索引扫描只在CBO模式下才有效。 CBO根据统计数值得知进行全Oracle索引扫描比进行全表扫描更有效时,才进行全Oracle索引扫描,而且此时查询出的数据都必须从索引中可以直接得到。

index fast full scan(索引快速全扫描):如果select 语句后面中的列都被包含在组合索引中,而且where后面没有出现组合索引的引导列,并且需要检索出大部分数据,那么这个时候可能执行index fast full scan。index fast full scan 发生的条件:

1.必须是组合索引。

2.引导列不在where条件中

index skip scan(索引跳跃式扫描)当查询可以通过组合索引得到结果,而且返回结果很少,并且where条件中没有包含索引引导列的时候,可能执行index skip scan

索引跳跃式扫描发生的条件:

1.必须是组合索引。

2.引导列没有出现在where条件中

实验针对数据表:

JL_KFBJDY

表索引:PK_JL_KFBJDY(JGBM[varchar2],KFID[number],QYID[number],BJID[number])

------------------------------------------------------------------------------------------------------

用例1:SELECT * FROM PMSADM.JL_KFBJDY WHERE JGBM='17'

命中结果:INDEX RANGE SCAN -> PK_JL_KFBJDY

结果分析:条件字段为唯一索引的前缀,以RANGE SCAN方式命中索引

用例1-1:SELECT * FROM PMSADM.JL_KFBJDY WHERE JGBM='17' AND X=1

命中结果:INDEX RANGE SCAN -> PK_JL_KFBJDY

结果分析:在用例1的基础上,加上非索引字段X作为条件,不影响索引命中

用例1-2:SELECT * FROM PMSADM.JL_KFBJDY WHERE X=1 AND JGBM='17'

命中结果:INDEX RANGE SCAN -> PK_JL_KFBJDY

结果分析:在用例1-1的基础上,点到条件顺序,不影响索引命中

------------------------------------------------------------------------------------------------------

用例2:SELECT * FROM PMSADM.JL_KFBJDY WHERE JGBM='17' AND KFID=1

命中结果:INDEX RANGE SCAN -> PK_JL_KFBJDY

结果分析:条件字段为唯一索引的前缀,以RANGE SCAN方式命中索引

------------------------------------------------------------------------------------------------------

用例3:SELECT * FROM PMSADM.JL_KFBJDY WHERE JGBM='17' AND KFID=1 AND QYID=1

命中结果:INDEX RANGE SCAN -> PK_JL_KFBJDY

结果分析:条件字段为唯一索引的前缀,以RANGE SCAN方式命中索引

用例3-1:SELECT * FROM PMSADM.JL_KFBJDY WHEREKFID=1 AND JGBM='17' AND QYID=1

命中结果:INDEX RANGE SCAN -> PK_JL_KFBJDY

结果分析:在用例3的基础上,调整字段顺序,仍然以RANGE SCAN方式命中索引

用例3-2:SELECT * FROM PMSADM.JL_KFBJDY WHEREKFID=1 AND X=1 AND JGBM='17' AND QYID=1

命中结果:INDEX RANGE SCAN -> PK_JL_KFBJDY

结果分析:在用例3-1的基础上,加入非索引字段X,仍然以RANGE SCAN方式命中索引

------------------------------------------------------------------------------------------------------

用例4:SELECT * FROM PMSADM.JL_KFBJDY WHERE JGBM='17' AND KFID=1 AND QYID=1 AND BJID=1

命中结果:INDEX UNIQUE SCAN -> PK_JL_KFBJDY

结果分析:条件字段为唯一索引字段,命中唯一索引

用例4-1:SELECT * FROM PMSADM.JL_KFBJDY WHERE KFID=1 AND JGBM='17' AND BJID=1 AND QYID=1

命中结果:INDEX UNIQUE SCAN-> PK_JL_KFBJDY

结果分析:在用例4的基础上,打乱条件的顺序,让然能命中唯一索引,说明顺序无关

------------------------------------------------------------------------------------------------------

用例5:SELECT * FROM PMSADM.JL_KFBJDY WHERE KFID=1 AND QYID=1 AND BJID=1

命中结果:INDEX SKIP SCAN-> PK_JL_KFBJDY

结果分析:条件包含部分索引字段(非前缀),以SKIP SCAN方式命中索引

------------------------------------------------------------------------------------------------------

用例6:SELECT * FROM PMSADM.JL_KFBJDY WHERE QYID=1 AND BJID=1

命中结果:INDEX SKIP SCAN-> PK_JL_KFBJDY

结果分析:条件包含部分索引字段(非前缀),以SKIP SCAN方式命中索引

------------------------------------------------------------------------------------------------------

用例7:SELECT * FROM PMSADM.JL_KFBJDY WHERE BJID=1

命中结果:INDEX SKIP SCAN-> PK_JL_KFBJDY

结果分析:条件包含部分索引字段(非前缀),以SKIP SCAN方式命中索引

用例7-1:SELECT * FROM PMSADM.JL_KFBJDY WHERE BJID=1 AND X=1 AND Y=1

命中结果:INDEX SKIP SCAN-> PK_JL_KFBJDY

结果分析:在用例7的基础上,加入非索引字段X,Y作为条件,仍然以SKIP SCAN方式命中索引

------------------------------------------------------------------------------------------------------

用例8:SELECT * FROM PMSADM.JL_KFBJDY WHERE JGBM='17' AND KFID='1' AND QYID='1' AND BJID=1

命中结果:INDEX UNIQUE SCAN -> PK_JL_KFBJDY

结果分析:条件字段为唯一索引字段,KFID和QYID数字字段传递字符串,有类型转换过程,仍然命中唯一索引

用例8-1:SELECT * FROM PMSADM.JL_KFBJDY WHERE JGBM='17' AND KFID='1' AND QYID='1'

命中结果:INDEX RANGE SCAN -> PK_JL_KFBJDY

结果分析: 在用例8的基础上,只传递唯一索引前缀字段,同时包含类型转换,仍然以RANGE SCAN方式命中索引

用例8-2:SELECT * FROM PMSADM.JL_KFBJDY WHERE JGBM='17' AND KFID='1' AND QYID='1'

命中结果:INDEX RANGE SCAN -> PK_JL_KFBJDY

结果分析: 在用例8-1的基础上,颠倒字段顺序,仍然以RANGE SCAN方式命中索引

用例8-3:SELECT * FROM PMSADM.JL_KFBJDY WHERE JGBM='17' AND KFID='1' AND QYID='1'

命中结果:INDEX RANGE SCAN -> PK_JL_KFBJDY

结果分析: 在用例8-2的基础上,去掉前缀字段,以SKIP SCAN方式命中索引

用例8-4:SELECT * FROM PMSADM.JL_KFBJDY WHERE JGBM='17' AND KFID='1' AND QYID='1' AND X=1

命中结果:INDEX RANGE SCAN -> PK_JL_KFBJDY

结果分析: 在用例8-3的基础上,加上非索引字段X作为条件,仍然以SKIP SCAN方式命中索引

------------------------------------------------------------------------------------------------------

最终结论:

1.唯一索引的所有字段出现在条件中,会以INDEX UNIQUE SCAN方式命中索引

2.当条件字段中包含索引定义的字段顺序的前缀时,将以INDEX RANGE SCAN方式命中索引

3.当条件字段中包含索引定义的一个或多个字段,但不是前缀字段时,以INDEX SKIP SCAN方式命中索引

4.条件中字段出现的顺序不影响命中

5.条件中出现非索引字段的个数、顺序不影响索引的命中

6.条件中出现数据类型转换不影响索引的命中

查看索引是否命中oracle,Oracle索引命中与扫描规律总结相关推荐

  1. 查看索引是否命中oracle,Oracle 索引命中详解

    整理一下Oracle数据查询索引命中情况,仅供参考,有问题欢迎指出修正: 创建测试表: CREATE TABLE TEST_HZ ( A  VARCHAR(20), B  VARCHAR(20), C ...

  2. oracle查看表空间的内容,学习笔记:Oracle查看object对象 表空间 表 索引 数据文件的使用空间...

    天萃荷净 运维DBA咨询想要查看Oracle的object对象的使用空间大小,包括表空间 表 索引 数据文件的使用空间 1.查看Oracle表空间大小 Select Tablespace_Name,S ...

  3. oracle查询表唯一索引,oracle查询索引(oracle查看表索引)

    oracle查询索引(oracle查看表索引) 2020-07-24 11:01:26 共10个回答 选中表右键View然后查看index 通过PL/SQL可以直接查看某表是否建索引,通过SQL查询s ...

  4. oracle in 索引_Oracle 性能优化总结

    作者 | 帅性而为1号 出处 : https://blog.csdn.net/zhushuai1221/article/details/51740846 网上关于SQL优化的教程很多,但是比较杂乱.近 ...

  5. oracle关于索引

    一. 说说你对索引的认识(索引的结构.对dml影响.对查询影响.为什么提高查询性能) 索引有B-TREE.BIT.CLUSTER等类型.ORACLE使用了一个复杂的自平衡B-tree结构;通常来说,在 ...

  6. 循序渐进学Oracle之索引、权限、角色

    一.索引简介: 索引是用于加速数据存取的数据对象,合理的使用索引可以大大降低I/O次数,从而提高数据访问性能.索引有很多种主要介绍常用的几种: 1-单列索引: 单列索引是基于单个列所建立的索引,语法: ...

  7. oracle建索引默认并发,ORACLE重建索引需要考虑问题

    一:考虑重建索引的场合 1:表上频繁发生update,delete操作 2:表上发生了alter table ..move操作(move操作导致了rowid变化) 二:判断重建索引的标准 索引重建是否 ...

  8. oracle索引对模糊查询,Oracle索引

    一.Oracle索引原理 通俗易懂得讲,索引就是给每条记录建立了一个目录(索引), 每个建立的索引都是按照这个索引的字段去排序(实际未必是排序)存放, 然后按照索引字段去查询的时候,就先去查询索引,此 ...

  9. oracle 唯一索引,唯一约束,主键之间的联系

    主键(primary key)是表中的一个或多个字段,它的值用于唯一地标识表中的某一条记录,在两个表的关系中,主键用来在一个表中引用来自于另一个表中的特定记录,,主键时一种唯一关键字,表定义的一部分. ...

  10. SQL Server,Oracle,DB2索引建立语句的对比

    http://database.51cto.com/art/201108/284540.htm SQL Server,Oracle,DB2索引建立语句的对比 2011-08-17 20:48 henr ...

最新文章

  1. 大话设计模式之简单的工厂模式
  2. Django中的auth模块
  3. 2014年acm亚洲区域赛·鞍山站
  4. 使用思科模拟器Packet Tracer与GNS3配置IPv6隧道
  5. C语言关系 是行还是列,C语言行优先和列优先的问题深入分析
  6. Docker-Compose快速搭建Oracle-11G系统
  7. RocketMQ常见面试题
  8. 微软物联网服务器,靠近物联网 微软发布定制 Linux内核
  9. angular 实现modal windows效果(即模态窗口,半透明的遮罩层),以及bootstrap(css,components,js)的初步学习...
  10. 2021华为秋招算法工程师面试经历(实习过)
  11. java 标准偏差函数std_如何使用JAVA计算标准差
  12. 什么是本格推理?有什么推荐作品?
  13. 这2个PDF转Word免费不限页数工具很多人没用过
  14. AWB调试中(Tuning)的几个问题
  15. Q50 数组中重复的数字
  16. 城市交通公众号2021年头部内容发布
  17. Polygon已在测试网中实现EIP-1559
  18. 如何在电脑上进行PDF压缩?
  19. 求后缀表达式的简便方法
  20. python把视频切成2秒_python进行视频切割

热门文章

  1. NOIP2016 “西湖边超萌小松鼠” 模拟赛
  2. c++也能做动图?——devc++窗口做简单移动
  3. typora图片插入问题
  4. 【DBA100人】李建明:一名普通DBA的14年技术之路与成长智慧
  5. formData 参数传不出去
  6. 计算机毕业设计基于asp.net网上考试报名系统
  7. Windows/Linux获取Mac地址和CPU序列号实现
  8. 计算机知识竞赛策划书前言,计算机知识竞赛策划书范文.docx
  9. 发邮件时提示连接服务器失败,发送邮件时经常出现发送失败或是连接超时什么原因...
  10. 昆仑通泰历史数据导出到u盘_MCGS配方组导出到U盘案例-专业自动化论坛-中国工控网论坛...