oracle松散索引扫描,oracle跳跃式索引扫描测试
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跳跃式索引扫描测试相关推荐
- oracle 索引快速全扫描,oracle中的索引扫描
一.INDEX UNIQUE SCAN(索引唯一扫描) 索引唯一性扫描(INDEX UNIQUE SCAN)是针对唯一性索引(UNIQUE INDEX)的扫描,它仅仅适用于where条件里是等值查询的 ...
- Oracle 表的访问方式(2)-----索引扫描
索引扫描(Index scan) 我们先通过index查找到数据对应的rowid值(对于非唯一索引可能返回多个rowid值),然后根据rowid直接从表中得到具体的数据,这种查找方式称为索引扫描或索引 ...
- oracle通过执行计划cost,Oracle 执行计划(5)—cost成本之索引范围扫描-B树索引
Oracle 执行计划(5)-cost成本之索引范围扫描-B树索引 SQL> select * from t1 where a<600 ; 已选择599行. 已用时间: 00: 00: ...
- Oracle教程之分析Oracle索引扫描四大类
学习Oracle时,你可能会遇到Oracle索引扫描问题,这里将介绍Oracle索引扫描问题的解决方法,在这里拿出来和大家分享一下.根据索引的类型与where限制条件的不同,有4种类型的Orac ...
- oracle执行计划cost单位,Oracle 执行计划(5)—cost成本之索引范围扫描-B树索引
Oracle 执行计划(5)-cost成本之索引范围扫描-B树索引 SQL> select * from t1 where a<600 ; 已选择599行. 已用时间: 00: 00: ...
- 由mysql报错注入引发的探究与思考(Group by, rand函数相关,松散索引扫描、紧凑索引扫描相关)
目录 本文要点 原理探讨(Group by, rand函数相关) 进一步的思考:索引与Group By语句 本文要点 当服务器没有关闭报错回显信息显示时,便可考虑实施报错注入类型的Mysql注入攻击. ...
- oracle 优化器 失效,oracle 优化器 不走索引原因
SQL优化器简介 基于规则的优化器 .总是使用索引 .总是从驱动表开始(from子句最右边的表) .只有在不可避免的情况下,才使用全表扫描 .任何索引都可以 基于成本的优化器 .需要表.索引的统计资料 ...
- OLTP系统的Oracle RAC性能调优,索引分区极大提升提交性能
有个误区:Oracle的表分区会增加查询性能,因为只需要在部分数据里查了:会增加降低插入性能,因为多了一步指定分区的操作.实际情况并非如此,至少在OLTP系统中,分区不一定会增加查询性能,但很可能会增 ...
- oracle复合索引介绍(多字段索引)
首先,在大多数情况下,复合索引比单字段索引好.以税务系统的SB_ZSXX(申报类_征收信息表)为例,该表为税务系统最大的交易表.如果分别按纳税人识别号,税务机关代码,月份3个字段查询,每个字段在该表中 ...
最新文章
- 去除浮动列表的右边距 利用负边距
- 计算机软件与程序没有任何关系,提示“该文件没有与之关联的程序来执行该操作”怎么解决?...
- stm8s003 8K空间不够用,出现报错,修改stvd参数进行最优化
- 实验吧— Crypto Write up(一)
- [Java基础]List集合子类特点
- idea集成python_IDEA集成Python插件,SDK配置
- python入门小游戏之跳一跳_从零基础开始,用python手把手教你玩跳一跳小游戏,直接打出高分...
- 多个key作为参数进行删除_作为开发人员这些Redis基础应该掌握
- Java中高级核心知识全面解析——常用框架(SpringMVC-工作原理详解)
- java实现微信支付
- Remove Duplicates from Sorted Array
- 硅谷课堂第十二课-公众号点播课程和直播管理模块
- 用Java代码实现区块链技术
- 滑动验证码整合SpringBoot方案推荐
- JavaScript(JS)的简单了解
- ArcGIS问题:dbf shp shx sbn sbx mdb adf等类型的文件的解释
- 星河万里 一路“童”行
- 声音信号希尔伯特黄变换
- 我想自学php但是网上视频很不连贯,ThinkPHP - 连贯操作
- 手机抖音设置自动切换下一个视频