使用WITH提高查詢效率

2021-09-08 02:45:13 字數 885 閱讀 7694

前兩天的業務需求裡需要關聯好幾張表出乙個詳單報表,這個需求其實很簡單,但是資料量大,源表又不是分割槽表,就變得很頭疼了。

最初我的**大概是這樣子的:

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個小時沒有跑出來的過程,居然很快的跑出來了,我很欣慰。就在這裡記錄一下這個知識點,和大家分享。

使用WITH提高查詢效率

前兩天的業務需求裡需要關聯好幾張表出乙個詳單報表,這個需求其實很簡單,但是資料量大,源表又不是分割槽表,就變得很頭疼了。最初我的 大概是這樣子的 select a.id,a.name,a.code,b.type,select p name from c c where c.pid b.pid fro...

使用子查詢提高MySQL分頁效率

今天在老王的部落格中看到了一篇 驗證使用子查詢提高mysql分頁效率 的文章,很有收穫,總結分享之 對於有大資料量的mysql表來說,使用limit分頁存在很嚴重的效能問題。例如老王做的測試,拿乙個接近一千萬行記錄的表,進行查詢從第1000000之後的30條記錄 sql 1 平均用時6.6秒 sel...

增加索引提高查詢效率

有個分頁,跳轉頁面後執行語句大致如下 select from v bidding group product where id in select top 400 id from v bidding group product where biddingid 50515 order by id an...