建分區表索引優化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  


 最終定型

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章