ORACLE:由位图索引引发的sql问题
原来系统中运行2、3分钟的sql,突然2天跑不完 sql如下: SELECT info.*,keyinfo.KEYSORT AS keysort 执行计划: Plan hash value: 1031842883 ---------------------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop | ---------------------------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 65385 (100)| | | | | 1 | NESTED LOOPS OUTER | | 50 | 235K| 65385 (2)| 00:13:05 | | | |* 2 | HASH JOIN RIGHT OUTER | | 50 | 232K| 65234 (2)| 00:13:03 | | | | 3 | MAT_VIEW ACCESS FULL | BUSIN_ACTIVITY | 24 | 336 | 3 (0)| 00:00:01 | | | | 4 | NESTED LOOPS OUTER | | 10 | 23760 | 65231 (2)| 00:13:03 | | | | 5 | NESTED LOOPS OUTER | | 10 | 23660 | 21806 (1)| 00:04:22 | | | | 6 | NESTED LOOPS OUTER | | 10 | 21080 | 21786 (1)| 00:04:22 | | | | 7 | PARTITION RANGE ITERATOR | | 10 | 890 | 21746 (1)| 00:04:21 | 140 | 142 | |* 8 | TABLE ACCESS BY LOCAL INDEX ROWID| BUSIN_HOT | 10 | 890 | 21746 (1)| 00:04:21 | 140 | 142 | | 9 | BITMAP CONVERSION TO ROWIDS | | | | | | | | |* 10 | BITMAP INDEX SINGLE VALUE | IDX_BUSIN_HOT_BITMAP_SEARCHS | | | | | 140 | 142 | | 11 | TABLE ACCESS BY GLOBAL INDEX ROWID| BUSIN_SRH | 1 | 2019 | 4 (0)| 00:00:01 | ROW L | ROW L | |* 12 | INDEX RANGE SCAN | ID_BUSIN_SRH_BC_ID1 | 1 | | 3 (0)| 00:00:01 | | | | 13 | TABLE ACCESS BY GLOBAL INDEX ROWID | PROVIDER_SRH | 1 | 258 | 2 (0)| 00:00:01 | ROW L | ROW L | |* 14 | INDEX UNIQUE SCAN | PK166_1_1 | 1 | | 1 (0)| 00:00:01 | | | |* 15 | TABLE ACCESS FULL | USER_AVERAGEQUALITYLOG | 1 | 10 | 4342 (2)| 00:00:53 | | | |* 16 | TABLE ACCESS BY INDEX ROWID | KEYWORD_INFO_SRH | 1 | 50 | 3 (0)| 00:00:01 | | | |* 17 | INDEX RANGE SCAN | I_KEYINFOSRH_TONUM_INFOID | 1 | | 2 (0)| 00:00:01 | | | ---------------------------------------------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("BUS"."ACTID"="ACT"."ACTID") 8 - filter(("SEARCHDATE">=TO_DATE(' 2015-07-25 00:00:00','syyyy-mm-dd hh24:mi:ss') AND "LOADSTATES"='H' AND "SEARCHDATE"<=TO_DATE(' 2015-09-01 23:59:59','syyyy-mm-dd hh24:mi:ss') AND "SRHCC"='001' AND "OPERSTATE"='1')) 10 - access("SEARCHSTATE"='1') 12 - access("BUSIN_HOT"."BC_ID"="BUS"."BC_ID") 14 - access("BUS"."PROVIDERID"="COR"."PROVIDERID") 15 - filter("COR"."PROVIDERID"="USRCOUNT"."PROVIDERID") 16 - filter("KEYINFO"."INFOTYPE"='0') 17 - access("BUS"."BC_ID"="KEYINFO"."SYS_NC00006$") hint不要走位图索引的执行计划: SELECT /*+ no_index(aa IDX_BUSIN_HOT_BITMAP_SEARCHS) */ * ------------------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop | ------------------------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 73655 (100)| | | | | 1 | NESTED LOOPS OUTER | | 50 | 235K| 73655 (2)| 00:14:44 | | | |* 2 | HASH JOIN RIGHT OUTER | | 50 | 232K| 73505 (2)| 00:14:43 | | | | 3 | MAT_VIEW ACCESS FULL | BUSIN_ACTIVITY | 24 | 336 | 3 (0)| 00:00:01 | | | | 4 | NESTED LOOPS OUTER | | 10 | 23760 | 73502 (2)| 00:14:43 | | | | 5 | NESTED LOOPS OUTER | | 10 | 23660 | 30077 (1)| 00:06:01 | | | | 6 | NESTED LOOPS OUTER | | 10 | 21080 | 30057 (1)| 00:06:01 | | | | 7 | PARTITION RANGE ITERATOR | | 10 | 890 | 30017 (1)| 00:06:01 | 140 | 142 | |* 8 | TABLE ACCESS FULL | BUSIN_HOT | 10 | 890 | 30017 (1)| 00:06:01 | 140 | 142 | | 9 | TABLE ACCESS BY GLOBAL INDEX ROWID| BUSIN_SRH | 1 | 2019 | 4 (0)| 00:00:01 | ROW L | ROW L | |* 10 | INDEX RANGE SCAN | ID_BUSIN_SRH_BC_ID1 | 1 | | 3 (0)| 00:00:01 | | | | 11 | TABLE ACCESS BY GLOBAL INDEX ROWID | PROVIDER_SRH | 1 | 258 | 2 (0)| 00:00:01 | ROW L | ROW L | |* 12 | INDEX UNIQUE SCAN | PK166_1_1 | 1 | | 1 (0)| 00:00:01 | | | |* 13 | TABLE ACCESS FULL | USER_AVERAGEQUALITYLOG | 1 | 10 | 4342 (2)| 00:00:53 | | | |* 14 | TABLE ACCESS BY INDEX ROWID | KEYWORD_INFO_SRH | 1 | 50 | 3 (0)| 00:00:01 | | | |* 15 | INDEX RANGE SCAN | I_KEYINFOSRH_TONUM_INFOID | 1 | | 2 (0)| 00:00:01 | | | ------------------------------------------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("BUS"."ACTID"="ACT"."ACTID") 8 - filter(("SEARCHDATE">=TO_DATE(' 2015-07-25 00:00:00','syyyy-mm-dd hh24:mi:ss') AND "LOADSTATES"='H' AND "SEARCHSTATE"='1' AND "SEARCHDATE"<=TO_DATE(' 2015-09-01 23:59:59','syyyy-mm-dd hh24:mi:ss') AND "SRHCC"='001' AND "OPERSTATE"='1')) 10 - access("AA"."BC_ID"="BUS"."BC_ID") 12 - access("BUS"."PROVIDERID"="COR"."PROVIDERID") 13 - filter("COR"."PROVIDERID"="USRCOUNT"."PROVIDERID") 14 - filter("KEYINFO"."INFOTYPE"='0') 15 - access("BUS"."BC_ID"="KEYINFO"."SYS_NC00006$")3分钟 此表还有一个位图索引,配合使用的执行计划: SELECT /*+ index(aa IDX_BUSIN_HOT_BITMAP_SEARCHS IDX_BUSIN_HOT_BITMAP_OPERS) */ * ---------------------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop | ---------------------------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 65393 (100)| | | | | 1 | NESTED LOOPS OUTER | | 50 | 235K| 65393 (2)| 00:13:05 | | | |* 2 | HASH JOIN RIGHT OUTER | | 50 | 232K| 65243 (2)| 00:13:03 | | | | 3 | MAT_VIEW ACCESS FULL | BUSIN_ACTIVITY | 24 | 336 | 3 (0)| 00:00:01 | | | | 4 | NESTED LOOPS OUTER | | 10 | 23760 | 65239 (2)| 00:13:03 | | | | 5 | NESTED LOOPS OUTER | | 10 | 23660 | 21814 (1)| 00:04:22 | | | | 6 | NESTED LOOPS OUTER | | 10 | 21080 | 21794 (1)| 00:04:22 | | | | 7 | PARTITION RANGE ITERATOR | | 10 | 890 | 21754 (1)| 00:04:22 | 140 | 142 | |* 8 | TABLE ACCESS BY LOCAL INDEX ROWID| BUSIN_HOT | 10 | 890 | 21754 (1)| 00:04:22 | 140 | 142 | | 9 | BITMAP CONVERSION TO ROWIDS | | | | | | | | | 10 | BITMAP AND | | | | | | | | |* 11 | BITMAP INDEX SINGLE VALUE | IDX_BUSIN_HOT_BITMAP_SEARCHS | | | | | 140 | 142 | |* 12 | BITMAP INDEX SINGLE VALUE | IDX_BUSIN_HOT_BITMAP_OPERS | | | | | 140 | 142 | | 13 | TABLE ACCESS BY GLOBAL INDEX ROWID| BUSIN_SRH | 1 | 2019 | 4 (0)| 00:00:01 | ROW L | ROW L | |* 14 | INDEX RANGE SCAN | ID_BUSIN_SRH_BC_ID1 | 1 | | 3 (0)| 00:00:01 | | | | 15 | TABLE ACCESS BY GLOBAL INDEX ROWID | PROVIDER_SRH | 1 | 258 | 2 (0)| 00:00:01 | ROW L | ROW L | |* 16 | INDEX UNIQUE SCAN | PK166_1_1 | 1 | | 1 (0)| 00:00:01 | | | |* 17 | TABLE ACCESS FULL | USER_AVERAGEQUALITYLOG | 1 | 10 | 4342 (2)| 00:00:53 | | | |* 18 | TABLE ACCESS BY INDEX ROWID | KEYWORD_INFO_SRH | 1 | 50 | 3 (0)| 00:00:01 | | | |* 19 | INDEX RANGE SCAN | I_KEYINFOSRH_TONUM_INFOID | 1 | | 2 (0)| 00:00:01 | | | ---------------------------------------------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("BUS"."ACTID"="ACT"."ACTID") 8 - filter(("SEARCHDATE">=TO_DATE(' 2015-07-25 00:00:00','syyyy-mm-dd hh24:mi:ss') AND "SRHCC"='001')) 11 - access("SEARCHSTATE"='1') 12 - access("OPERSTATE"='1') 14 - access("AA"."BC_ID"="BUS"."BC_ID") 16 - access("BUS"."PROVIDERID"="COR"."PROVIDERID") 17 - filter("COR"."PROVIDERID"="USRCOUNT"."PROVIDERID") 18 - filter("KEYINFO"."INFOTYPE"='0') 19 - access("BUS"."BC_ID"="KEYINFO"."SYS_NC00006$")比上面不走位图索引略快
生产上使用位图索引要慎重!!! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |