建分区表索引优化SQL

 SQL 优化的 分类早就有了, 就是碰不到 优化的典型例子, 今天遇到一个....... 

页面上面的SQL :

  select count(*)

  from   taba.npai, dm_area da
 where npai.local_area_id = 3

   and npai.area_id = da.area_id   

  第一次跑 65s    让人忍受不了


 简单看下执行计划, 忘记搞出来了,  大致知道内容。    taba  的local_area_id  表作为  list 分区, 分区中大概有 2千万数据, 看了一个 segements  大概 2.5G好像。  

谓词过滤条件为   da.area_id   , 大概91 条数据, 主要 dm_area  的影响,  dm_area 表正好为 参数表,   area_id  对应一条数据,  


于是优化SQL 思路有了,考察了 area_id  列, 发现最适合建的索引      create bitmap  index idx_area_id on tab (area_id,0) local;   

  

   select /*+ index(npai, idx_area_id) */ count(1) from  taba  npai,    dm_area da 

 where npai.local_area_id = 3 and   npai.area_id = da.area_id    ---- 结果好像是 5秒  


一看还有地方 可以改进 

  select /*+ index(npai, idx_area_id) */ count(1) from  taba  npai where   npai.local_area_id = 3
    and exists ( select 1 from   dm_area da where npai.area_id = da.area_id);    --- 0.017s  


 最终定型

 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值