您的位置:首页 > 数据库

建分区表索引优化SQL

2015-10-27 00:11 363 查看
 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  

 最终定型

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: