使用WITH提高查詢效率


     前兩天的業務需求里需要關聯好幾張表出一個詳單報表,這個需求其實很簡單,但是數據量大,源表又不是分區表,就變得很頭疼了。

     最初我的代碼大概是這樣子的:

select 
a.id,
a.name,
a.code,
b.type,
(
select p_name
from C c
where c.pid = b.pid
)
from A a, B b
where a.id = b.id and a.id > 1000;

     這樣的話如果三個表數據量小就沒事兒了,一會兒就跑出來了。但是我們的A表上億,A一個id對應B里的好多個id,那么B的數據量就更大了。C也差不多,這樣一來就要老命了。這個時候我想到了用with這個辦法來減小數據量。

     WITH這個東西主要是產生一個臨時的表,可以通過各種條件見小數據量,挑選需要的列,如此這般,數據量就會小很多。WITH沒有辦法提高效率,但是就是降低數據量,靠硬件的優勢。修改以后的代碼如下:

with AA as (select id, name, code, type from A where id > 1000),
BB as (select type, pid from B),
CC as (select p_name, pid from C)
select AA.id, AA.name, AA.code, BB.type, C.p_name from AA, BB, CC
where AA.id = BB.id
and CC.pid = BB.pid;

     經過業務上跑了一遍,原本13個小時沒有跑出來的過程,居然很快的跑出來了,我很欣慰。就在這里記錄一下這個知識點,和大家分享。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM