前兩天的業務需求裡需要關聯好幾張表出乙個詳單報表,這個需求其實很簡單,但是資料量大,源表又不是分割槽表,就變得很頭疼了。
最初我的**大概是這樣子的:
selecta.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...