联合索引多执行计划的影响一例

    一般来说使用联合索引比使用多个单独索引要有效很多,甚至有时2种情况的执行计划天差地远。

   今天就遇到了这么个情况:

           库里有个SQL执行相当慢,CPU COST极高,估算的TIME有10多分钟。SQL如下

select   count(1)  from article where site in (22)  and   type >= 0;

很简单的一条SQL,CBO居然给出的计划

SELECT STATEMENT, GOAL = ALL_ROWS  

SORT AGGREGATE  

VIEW              index$_join$_002 

   HASH JOIN   

   
    INDEX FAST FULL SCAN       ARTICLE_SITE 

    INDEX FAST FULL SCAN      ARTICLE_TYPE

CBO选择了分别走2个索引,然后对2个索引做了HASH JOIN 然后再生成视图,之所以这样选择是为了避开2次回表扫描 table scan by rowid...   ,但当数据量很大的时候,HASH JOIN 很明显会使用到大量的TEMP表空间,导致大量的IO操作。

这种情况如果在SITE和TYPE上创建联合索引,主动的避开了回表扫描,执行计划就会产生天翻地覆的变化

SELECT STATEMENT, GOAL = ALL_ROWS   
 SORT AGGREGATE    
  INDEX RANGE SCAN     ARTICLE_COMP 

直接一个范围扫描就解决问题,执行速度大幅度提高,重要的是避免了DISK IO的操作,TIME从10多分钟下降到了几秒。

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

转载于:http://blog.itpub.net/13351439/viewspace-445564/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值