基于sql优化,rule的使用小改动大变化

业务部门抱怨报表执行慢,查看了下该报表生成的执行计划:

执行计划
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=16 Card=1 Bytes=71)


1 0 SORT (AGGREGATE)


2 1 TABLE ACCESS (BY INDEX ROWID) OF 'TOAF_ORDEREDPRODUCT' (Cost=18 Card=53 Bytes=901)


3 2 INDEX (RANGE SCAN) OF 'I_COLOURCODE' (NON-UNIQUE) (Cost=1 Card=19766)


4 0 SORT (AGGREGATE)


5 4 TABLE ACCESS (BY INDEX ROWID) OF 'TOAF_ORDEREDPRODUCT' (Cost=18 Card=53 Bytes=901)


6 5 INDEX (RANGE SCAN) OF 'I_COLOURCODE' (NON-UNIQUE) (Cost=1 Card=19766)


7 0 SORT (AGGREGATE)


8 7 TABLE ACCESS (BY INDEX ROWID) OF 'TOAF_ORDEREDPRODUCT' (Cost=18 Card=53 Bytes=901)


9 8 INDEX (RANGE SCAN) OF 'I_COLOURCODE' (NON-UNIQUE) (Cost=1 Card=19766)


10 0 TABLE ACCESS (BY INDEX ROWID) OF 'TSCM_PRODUCT' (Cost=2 Card=1 Bytes=37)


11 10 NESTED LOOPS (Cost=16 Card=1 Bytes=71)


12 11 HASH JOIN (Cost=14 Card=1 Bytes=34)


13 12 TABLE ACCESS (FULL) OF 'TVWS_PRODUCTQTY' (Cost=6 Card=4212 Bytes=67392)


14 12 TABLE ACCESS (FULL) OF 'TSCM_PRODUCTCOLOURSTYLE' (Cost=6 Card=4160 Bytes=74880)


15 11 INDEX (RANGE SCAN) OF 'IDX_TSCM_PRODUCT_1' (NON-UNIQUE) (Cost=1 Card=1)


统计信息
----------------------------------------------------------
8327 recursive calls
0 db block gets
184362743 consistent gets
23 physical reads
180 redo size
170200 bytes sent via SQL*Net to client
2183 bytes received via SQL*Net from client
279 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
4160 rows processed

大量的 consistent gets 184362743

性能消耗过大的原因:

TABLE ACCESS (FULL) OF 'TSCM_PRODUCTCOLOURSTYLE' (Cost=6 Card=4160 Bytes=74880)

TABLE ACCESS (FULL) OF 'TVWS_PRODUCTQTY' (Cost=6 Card=4212 Bytes=67392)

2个大表进行的TABLE ACCESS (FULL)

关联字段都存在索引,为何oracle没有基于CBO使用最小性能代价的优化没有想懂。

在sql中添加/*+ RULE */ 重新执行sql:


执行计划
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=HINT: RULE


1 0 SORT (AGGREGATE)


2 1 TABLE ACCESS (BY INDEX ROWID) OF 'TOAF_ORDEREDPRODUCT'


3 2 AND-EQUAL


4 3 INDEX (RANGE SCAN) OF 'I_ORDEREDPRODPRODID' (NON-UNIQUE)


5 3 INDEX (RANGE SCAN) OF 'I_STYLECODE' (NON-UNIQUE)


6 3 INDEX (RANGE SCAN) OF 'I_COLOURCODE' (NON-UNIQUE)


7 0 SORT (AGGREGATE)


8 7 TABLE ACCESS (BY INDEX ROWID) OF 'TOAF_ORDEREDPRODUCT'


9 8 AND-EQUAL


10 9 INDEX (RANGE SCAN) OF 'I_ORDEREDPRODPRODID' (NON-UNIQUE)


11 9 INDEX (RANGE SCAN) OF 'I_STYLECODE' (NON-UNIQUE)


12 9 INDEX (RANGE SCAN) OF 'I_COLOURCODE' (NON-UNIQUE)


13 0 SORT (AGGREGATE)


14 13 TABLE ACCESS (BY INDEX ROWID) OF 'TOAF_ORDEREDPRODUCT'


15 14 AND-EQUAL


16 15 INDEX (RANGE SCAN) OF 'I_ORDEREDPRODPRODID' (NON-UNIQUE)


17 15 INDEX (RANGE SCAN) OF 'I_STYLECODE' (NON-UNIQUE)


18 15 INDEX (RANGE SCAN) OF 'I_COLOURCODE' (NON-UNIQUE)


19 0 TABLE ACCESS (BY INDEX ROWID) OF 'TSCM_PRODUCT'


20 19 NESTED LOOPS


21 20 NESTED LOOPS


22 21 TABLE ACCESS (FULL) OF 'TSCM_PRODUCTCOLOURSTYLE'


23 21 TABLE ACCESS (BY INDEX ROWID) OF 'TVWS_PRODUCTQTY'


24 23 INDEX (RANGE SCAN) OF 'IND_PRODUCTID' (NON-UNIQUE)


25 20 INDEX (RANGE SCAN) OF 'I_PRODUCTID_1' (NON-UNIQUE)


统计信息
----------------------------------------------------------
8332 recursive calls
0 db block gets
8781478 consistent gets
0 physical reads
0 redo size
172229 bytes sent via SQL*Net to client
2183 bytes received via SQL*Net from client
279 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
4166 rows processed

consistent gets由原来的184362743 减少到8781478

关联字段也走了索引

TABLE ACCESS (BY INDEX ROWID) OF 'TVWS_PRODUCTQTY'

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7417660/viewspace-1056981/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7417660/viewspace-1056981/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值