今天在ORACLE8.17上一个做一个统计SQL,开始用
Select /*+ ordered parallel 8 index (a index_a) */
a.msisdn From dbuser.table_b b,
dbuser.table_a a
Where a.serv_id=b.serv_id And A.BILLING_CYCLE_ID<'200411' And a.billing_cycle_id>'200406'
执行计划如下
SELECT STATEMENT, GOAL = RULE Cost=1221 Cardinality=120 Bytes=3720
HASH JOIN Cost=1221 Cardinality=120 Bytes=3720
TABLE ACCESS FULL Object wner=ACCOUNT Object name=table_b Cost=391 Cardinality=2000 Bytes=16000
TABLE ACCESS BY INDEX ROWID Object wner=ACCOUNT Object name=table_a Cost=826 Cardinality=6 Bytes=138
INDEX FULL SCAN Object wner=SALES Object name=index_a Cost=26 Cardinality=6
非常奇怪,居然使用的是INDEX FULL SCAN
然后尝试使用no_index ,排除可能使用索引
Select /*+ ordered parallel 8 no_index (a index_b) */
a.msisdn From dbuser.table_b b,
dbuser.table_a a
Where a.serv_id=b.serv_id And A.BILLING_CYCLE_ID<'200411' And a.billing_cycle_id>'200406'
结果居然是我想要的,执行计划如下
SELECT STATEMENT, GOAL = RULE Cost=4391 Cardinality=120 Bytes=3720
NESTED LOOPS Cost=4391 Cardinality=120 Bytes=3720
TABLE ACCESS FULL Object wner=ACCOUNT Object name=table_b Cost=391 Cardinality=2000 Bytes=16000
TABLE ACCESS BY INDEX ROWID Object wner=ACCOUNT Object name=table_a Cost=2 Cardinality=6 Bytes=138
INDEX RANGE SCAN Object wner=SALES Object name=index_a Cost=1 Cardinality=6
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/13165828/viewspace-594281/ ,如需转载,请注明出处,否则将追究法律责任。