天天看點

oracle with sql優化

最近工作有個需求,需要通過一個SQL實作。

當時的邏輯是

with a  as(

select * from a

),

b as (

select * from b

),

c as (

select * from c

)

select a.a,sum(case ..) from a 

join b on a.id=b.id and b.cn>10

join c on a.id=c.id

group by a.a

整個SQL執行完大概花了15分鐘,由于SQl需要放線上上系統的,這個時間是完全不行的。

于是隻能下手優化。

先是把with裡的a,b,c中能聚合的都聚合,聚合之後,在後面進行計算,

執行下來,時間還是比較久。

後續看了下執行計劃,貌似太多的nest loop,然後腦洞開了一下。把b的條件加到a裡,直接把資料量級由幾萬限定到幾千,

再完成後續的處理。

修改完,執行時間隻需要10秒。之前很少涉及oracle優化方面的東西,自己第一次成功的優化,記錄下!

繼續閱讀