Oracle 中我们知道能够使用跳跃式索引扫描(Index Skip Scan).然而,能利用跳跃式索引扫描的情况其实是有些限制的CREATE TABLE test AS SELECT ROWNUM a,ROWNUM-1 b ,ROWNUM-2 c,ROWNUM-3 d,ROWNUM-4 e FROM all_objects;SQL> CREATE TABLE test AS SELECT ROWNUM a,ROWNUM-1 b ,ROWNUM-2 c,ROWNUM-3 d,ROWNUM-4 e FROM all_objects;Table created.Elapsed: 00:00:02.78SQL> desc test; Name                               Null?    Type ----------------------------------------------------- -------- ------------------------------------ A                                NUMBER B                                NUMBER C                                NUMBER D                                NUMBER E                                NUMBERSELECT DISTINCT COUNT (a) FROM test;SQL> SELECT DISTINCT COUNT (a) FROM test;  COUNT(A)----------     84394CREATE INDEX test_idx ON test(a,b,c);SQL> create index test_idx on test(a,b,c);Index created.ANALYZE TABLE test COMPUTE STATISTICS;SET autotrace traceonly explain;SELECT *  FROM test WHERE b = 99;SQL> analyze table test compute statistics;Table analyzed.Elapsed: 00:00:02.46SQL> set autotrace traceonly explain;SQL> select * from test where b=99;Elapsed: 00:00:00.00Execution Plan----------------------------------------------------------Plan hash value: 1357081020--------------------------------------------------------------------------| Id  | Operation      | Name | Rows  | Bytes | Cost (%CPU)| Time     |--------------------------------------------------------------------------|   0 | SELECT STATEMENT  |     |     1 |    20 |    96   (2)| 00:00:02 ||*  1 |  TABLE ACCESS FULL| TEST |     1 |    20 |    96   (2)| 00:00:02 |--------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------   1 - filter("B"=99)    -可见这里CBO选择了全表扫描我们接着做另一个测试 drop table test; CREATE TABLE test  AS SELECT DECODE(MOD(ROWNUM,2), 0, '1', '2' ) a,ROWNUM-1 b,ROWNUM-2 c,ROWNUM-3 d,ROWNUM-4 e FROM all_objects  set autotrace off select distinct a from test; SQL> select distinct a from test;A-12Elapsed: 00:00:00.08 CREATE INDEX test_idx ON test(a,b,c)  SQL> SELECT *  FROM test WHERE b = 99;Elapsed: 00:00:00.01Execution Plan----------------------------------------------------------Plan hash value: 2705879578----------------------------------------------------------------------------------------| Id  | Operation            | Name     | Rows  | Bytes | Cost (%CPU)| Time     |----------------------------------------------------------------------------------------|   0 | SELECT STATEMENT        |           |     1 |    17 |     4     (0)| 00:00:01 ||   1 |  TABLE ACCESS BY INDEX ROWID| TEST     |     1 |    17 |     4     (0)| 00:00:01 ||*  2 |   INDEX SKIP SCAN        | TEST_IDX |     1 |       |     3     (0)| 00:00:01 |----------------------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------   2 - access("B"=99)       filter("B"=99)结论:Oracle的优化器(这里指的是CBO)能对查询应用Index Skip Scans至少要有几个条件:1 优化器认为是合适的.2 索引中的前导列的唯一值的数量能满足一定的条件.3 优化器要知道前导列的值分布(通过分析/统计表得到)4 合适的SQL语句

oracle松散索引扫描,oracle跳跃式索引扫描测试相关推荐

  1. oracle 索引快速全扫描,oracle中的索引扫描

    一.INDEX UNIQUE SCAN(索引唯一扫描) 索引唯一性扫描(INDEX UNIQUE SCAN)是针对唯一性索引(UNIQUE INDEX)的扫描,它仅仅适用于where条件里是等值查询的 ...

  2. Oracle 表的访问方式(2)-----索引扫描

    索引扫描(Index scan) 我们先通过index查找到数据对应的rowid值(对于非唯一索引可能返回多个rowid值),然后根据rowid直接从表中得到具体的数据,这种查找方式称为索引扫描或索引 ...

  3. oracle通过执行计划cost,Oracle 执行计划(5)—cost成本之索引范围扫描-B树索引

    Oracle 执行计划(5)-cost成本之索引范围扫描-B树索引 SQL>  select * from t1 where a<600 ; 已选择599行. 已用时间:  00: 00: ...

  4. Oracle教程之分析Oracle索引扫描四大类

       学习Oracle时,你可能会遇到Oracle索引扫描问题,这里将介绍Oracle索引扫描问题的解决方法,在这里拿出来和大家分享一下.根据索引的类型与where限制条件的不同,有4种类型的Orac ...

  5. oracle执行计划cost单位,Oracle 执行计划(5)—cost成本之索引范围扫描-B树索引

    Oracle 执行计划(5)-cost成本之索引范围扫描-B树索引 SQL>  select * from t1 where a<600 ; 已选择599行. 已用时间:  00: 00: ...

  6. 由mysql报错注入引发的探究与思考(Group by, rand函数相关,松散索引扫描、紧凑索引扫描相关)

    目录 本文要点 原理探讨(Group by, rand函数相关) 进一步的思考:索引与Group By语句 本文要点 当服务器没有关闭报错回显信息显示时,便可考虑实施报错注入类型的Mysql注入攻击. ...

  7. oracle 优化器 失效,oracle 优化器 不走索引原因

    SQL优化器简介 基于规则的优化器 .总是使用索引 .总是从驱动表开始(from子句最右边的表) .只有在不可避免的情况下,才使用全表扫描 .任何索引都可以 基于成本的优化器 .需要表.索引的统计资料 ...

  8. OLTP系统的Oracle RAC性能调优,索引分区极大提升提交性能

    有个误区:Oracle的表分区会增加查询性能,因为只需要在部分数据里查了:会增加降低插入性能,因为多了一步指定分区的操作.实际情况并非如此,至少在OLTP系统中,分区不一定会增加查询性能,但很可能会增 ...

  9. oracle复合索引介绍(多字段索引)

    首先,在大多数情况下,复合索引比单字段索引好.以税务系统的SB_ZSXX(申报类_征收信息表)为例,该表为税务系统最大的交易表.如果分别按纳税人识别号,税务机关代码,月份3个字段查询,每个字段在该表中 ...

最新文章

  1. 去除浮动列表的右边距 利用负边距
  2. 计算机软件与程序没有任何关系,提示“该文件没有与之关联的程序来执行该操作”怎么解决?...
  3. stm8s003 8K空间不够用,出现报错,修改stvd参数进行最优化
  4. 实验吧— Crypto Write up(一)
  5. [Java基础]List集合子类特点
  6. idea集成python_IDEA集成Python插件,SDK配置
  7. python入门小游戏之跳一跳_从零基础开始,用python手把手教你玩跳一跳小游戏,直接打出高分...
  8. 多个key作为参数进行删除_作为开发人员这些Redis基础应该掌握
  9. Java中高级核心知识全面解析——常用框架(SpringMVC-工作原理详解)
  10. java实现微信支付
  11. Remove Duplicates from Sorted Array
  12. 硅谷课堂第十二课-公众号点播课程和直播管理模块
  13. 用Java代码实现区块链技术
  14. 滑动验证码整合SpringBoot方案推荐
  15. JavaScript(JS)的简单了解
  16. ArcGIS问题:dbf shp shx sbn sbx mdb adf等类型的文件的解释
  17. 星河万里 一路“童”行
  18. 声音信号希尔伯特黄变换
  19. 我想自学php但是网上视频很不连贯,ThinkPHP - 连贯操作
  20. 手机抖音设置自动切换下一个视频

热门文章

  1. 互联网公司发布会策划指南(包学包会)
  2. oj记录 牛客 高校赛 派蒙大小姐想让你告白
  3. Jsp制作登陆界面(无后台)
  4. 完全卸载SQL2000
  5. adb 查看磁盘占用_adb log存储大小查看
  6. VS2010用OLEDB连接Access
  7. StarUML 安装教程
  8. Linux驱动学习——入门
  9. 学计算机高考英语听力考试,高考英语听力考试
  10. 新风系统风速推荐表_新风系统该如何选择管径、计算风速与全压?知道