[20190111]执行计划bitmap and.txt --//要修改生产系统一条执行计划bitmap and,遇到一些问题,做一个记录: 1.环境: SCOTT@book> @ ver1 PORT_STRING VERSION BANNER ------------------------------ -------------- -------------------------------------------------------------------------------- x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production SCOTT@book> create table t as select rownum id1,rownum+1 id2, 'test' name from dual connect by level<=2e5; Table created. SCOTT@book> create index i_t_id1 on t(id1); Index created. SCOTT@book> create index i_t_id2 on t(id2); Index created. --//分析略. 2.测试: SCOTT@book> alter session set statistics_level=all ; Session altered. SCOTT@book> select /*+ index(t i_t_id1) index(t i_t_id2) */* from t where id1=42 and id2=43; ID1 ID2 NAME ---------- ---------- -------------------- 42 43 test Plan hash value: 1183254286 --------------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time | A-Rows | A-Time | Buffers | --------------------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | | 2 (100)| | 1 |00:00:00.01 | 4 | |* 1 | TABLE ACCESS BY INDEX ROWID| T | 1 | 1 | 15 | 2 (0)| 00:00:01 | 1 |00:00:00.01 | 4 | |* 2 | INDEX RANGE SCAN | I_T_ID1 | 1 | 1 | | 1 (0)| 00:00:01 | 1 |00:00:00.01 | 3 | --------------------------------------------------------------------------------------------------------------------------------- --//执行计划并没有选择2个索引,google发现要使用提示INDEX_COMBINE. select /*+ INDEX_COMBINE(t i_t_id1 i_t_id2) */* from t where id1=42 and id2=43; SCOTT@book> select /*+ INDEX_COMBINE(t i_t_id1 i_t_id2) */* from t where id1=42 and id2=43; ID1 ID2 NAME ---------- ---------- ---------------------------------------- 42 43 test Plan hash value: 619742204 -------------------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time | A-Rows | A-Time | Buffers | -------------------------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | | 2 (100)| | 1 |00:00:00.01 | 5 | | 1 | TABLE ACCESS BY INDEX ROWID | T | 1 | 1 | 15 | 2 (0)| 00:00:01 | 1 |00:00:00.01 | 5 | | 2 | BITMAP CONVERSION TO ROWIDS | | 1 | | | | | 1 |00:00:00.01 | 4 | | 3 | BITMAP AND | | 1 | | | | | 1 |00:00:00.01 | 4 | | 4 | BITMAP CONVERSION FROM ROWIDS| | 1 | | | | | 1 |00:00:00.01 | 2 | |* 5 | INDEX RANGE SCAN | I_T_ID1 | 1 | | | 1 (0)| 00:00:01 | 1 |00:00:00.01 | 2 | | 6 | BITMAP CONVERSION FROM ROWIDS| | 1 | | | | | 1 |00:00:00.01 | 2 | |* 7 | INDEX RANGE SCAN | I_T_ID2 | 1 | | | 1 (0)| 00:00:01 | 1 |00:00:00.01 | 2 | -------------------------------------------------------------------------------------------------------------------------------------- Outline Data ------------- /*+ BEGIN_OUTLINE_DATA IGNORE_OPTIM_EMBEDDED_HINTS OPTIMIZER_FEATURES_ENABLE('11.2.0.4') DB_VERSION('11.2.0.4') ALL_ROWS OUTLINE_LEAF(@"SEL$1") BITMAP_TREE(@"SEL$1" "T"@"SEL$1" AND(("T"."ID1") ("T"."ID2"))) END_OUTLINE_DATA */ 3.顺便记录bitmap or的情况: SCOTT@book> select /*+ INDEX_COMBINE(t i_t_id1 i_t_id2) */* from t where id1=42 or id2=43; ID1 ID2 NAME ---------- ---------- ---------------------------------------- 42 43 test Plan hash value: 3639385359 -------------------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time | A-Rows | A-Time | Buffers | -------------------------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | | 2 (100)| | 1 |00:00:00.01 | 5 | | 1 | TABLE ACCESS BY INDEX ROWID | T | 1 | 2 | 30 | 2 (0)| 00:00:01 | 1 |00:00:00.01 | 5 | | 2 | BITMAP CONVERSION TO ROWIDS | | 1 | | | | | 1 |00:00:00.01 | 4 | | 3 | BITMAP OR | | 1 | | | | | 1 |00:00:00.01 | 4 | | 4 | BITMAP CONVERSION FROM ROWIDS| | 1 | | | | | 1 |00:00:00.01 | 2 | |* 5 | INDEX RANGE SCAN | I_T_ID1 | 1 | | | 1 (0)| 00:00:01 | 1 |00:00:00.01 | 2 | | 6 | BITMAP CONVERSION FROM ROWIDS| | 1 | | | | | 1 |00:00:00.01 | 2 | |* 7 | INDEX RANGE SCAN | I_T_ID2 | 1 | | | 1 (0)| 00:00:01 | 1 |00:00:00.01 | 2 | -------------------------------------------------------------------------------------------------------------------------------------- Outline Data ------------- /*+ BEGIN_OUTLINE_DATA IGNORE_OPTIM_EMBEDDED_HINTS OPTIMIZER_FEATURES_ENABLE('11.2.0.4') DB_VERSION('11.2.0.4') ALL_ROWS OUTLINE_LEAF(@"SEL$1") BITMAP_TREE(@"SEL$1" "T"@"SEL$1" OR(1 1 ("T"."ID1") 2 ("T"."ID2"))) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ END_OUTLINE_DATA */ --//注意里面的or ,前面是and. 4.记录使用or_expand and USE_CONCAT提示的情况. --//11g 我无法使用or_expand. 12c可以. SCOTT@book> select /*+ USE_CONCAT */* from t where id1=42 or id2=43; ID1 ID2 NAME ---------- ---------- ---------------------------------------- 42 43 test SCOTT@book> @ dpc '' outline PLAN_TABLE_OUTPUT ------------------------------------- SQL_ID 0mb95w3qw5wjw, child number 0 ------------------------------------- select /*+ USE_CONCAT */* from t where id1=42 or id2=43 Plan hash value: 951918345 ---------------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time | A-Rows | A-Time | Buffers | ---------------------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | | 4 (100)| | 1 |00:00:00.01 | 7 | | 1 | CONCATENATION | | 1 | | | | | 1 |00:00:00.01 | 7 | | 2 | TABLE ACCESS BY INDEX ROWID| T | 1 | 1 | 15 | 2 (0)| 00:00:01 | 1 |00:00:00.01 | 4 | |* 3 | INDEX RANGE SCAN | I_T_ID2 | 1 | 1 | | 1 (0)| 00:00:01 | 1 |00:00:00.01 | 3 | |* 4 | TABLE ACCESS BY INDEX ROWID| T | 1 | 1 | 15 | 2 (0)| 00:00:01 | 0 |00:00:00.01 | 3 | |* 5 | INDEX RANGE SCAN | I_T_ID1 | 1 | 1 | | 1 (0)| 00:00:01 | 1 |00:00:00.01 | 2 | ---------------------------------------------------------------------------------------------------------------------------------- Outline Data ------------- /*+ BEGIN_OUTLINE_DATA IGNORE_OPTIM_EMBEDDED_HINTS OPTIMIZER_FEATURES_ENABLE('11.2.0.4') DB_VERSION('11.2.0.4') ALL_ROWS OUTLINE_LEAF(@"SEL$1") OUTLINE_LEAF(@"SEL$1_1") USE_CONCAT(@"SEL$1" 8 OR_PREDICATES(1)) OUTLINE_LEAF(@"SEL$1_2") OUTLINE(@"SEL$1") INDEX_RS_ASC(@"SEL$1_1" "T"@"SEL$1" ("T"."ID2")) INDEX_RS_ASC(@"SEL$1_2" "T"@"SEL$1_2" ("T"."ID1")) END_OUTLINE_DATA */ Predicate Information (identified by operation id): --------------------------------------------------- 3 - access("ID2"=43) 4 - filter(LNNVL("ID2"=43)) 5 - access("ID1"=42) 总结: 1.bitmap and,bitmap or,可以使用提示index_combine. 2.谓词出现or ,还可以使用or_expand , USE_CONCAT来控制执行计划.
[20190111]执行计划bitmap and.txt
来源:这里教程网
时间:2026-03-03 12:52:41
作者:
编辑推荐:
- oracle rman 删除过期的归档03-03
- [20190111]执行计划bitmap and.txt03-03
- 这几个技巧你肯定没见过,Word那些好玩的技巧03-03
- dbms_pclxutil.build_part_index包的用法03-03
- RMAN-04006: error from auxiliary database: ORA-12528: TNS:listener: all appropri03-03
- Error: ORA-16664: unable to receive the result from a database03-03
- 对于Word文档不允许修改的两种解决方法03-03
- 大于等于号怎么打≥:Word符号与公式录入宝典第六篇03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- oracle两节点RAC,由于gipc导致某节点crs无法启动问题分析
oracle两节点RAC,由于gipc导致某节点crs无法启动问题分析
26-03-03 - 一个容易被忽略的SQL调优技巧 --- order by字段到底要不要加入索引
- 为什么没有Word2003公式编辑器,如何安装?
为什么没有Word2003公式编辑器,如何安装?
26-03-03 - Oracle数据库SQL语句执行过程
Oracle数据库SQL语句执行过程
26-03-03 - ORACLE中seq$表更新频繁的分析
ORACLE中seq$表更新频繁的分析
26-03-03 - 重做日志管理
重做日志管理
26-03-03 - null值在oracle和mysql中的差异
null值在oracle和mysql中的差异
26-03-03 - oracle RAC 11g for linux 7的那些坑
oracle RAC 11g for linux 7的那些坑
26-03-03 - ORACLE 数据库服务器业务高峰期高危动作之IOSCAN(HPUNIX)
- Reasons for incorrect gl balance
Reasons for incorrect gl balance
26-03-03
