換個思路解決union連接數據過多時,導致查詢慢的問題

最近在一開發的過程中用到了union連接多個查詢結果,但這種方式是數據量大的時候會導致查詢慢。爲此想了一些辦法來解決之個問題,在開始之前呢,先簡單說下union與union all的區別,union將查詢結果合併時會將重複的數據合併爲一條,union all則不會將重複數據其合併爲一條。

業務場景:主表A存儲了一個id,這個主鍵即有可能在B表中,也有可能在C表中(可以簡單理解爲分表操作,實際業務場景並不是,只是類似)

最初的實現:

select a.bc_id,bc.name,bc.age from A a 
left join
(select b.id,b.name,b.age from B b union select c.id,c.name,c.age from C c) bc
on a.bc_id = bc.id

基本的思路就是將B表與C表的數據合併爲臨時表bc,然後再與A表做關聯查詢。

改進後的代碼:

select a.bc_id,b.name,b.age from A a,B b where a.bc_id = b.id union
select a.bc_id,c.name,c.age from A a,C c where a.bc_id = c.id

思路:這樣寫的好處,是在數據合併之前就進行了篩選,減少了數據量,從而能在一定程度上提高查詢速度。

總結:以後我們在遇到類似問題的時候,一定要先篩選再合併數據,這樣可以有效的減少數據量,提高查詢速度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章