SQL 優化的 分類早就有了, 就是碰不到 優化的典型例子, 今天遇到一個.......
頁面上面的SQL :
select count(*)
from taba.npai, dm_area dawhere 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
最終定型