SQL優化——union與union all 、left join 和 inner join 及 內連接


  最近在優化一個功能,原寫法是視圖中套用視圖,視圖中又有視圖,且查詢了多張表用不同的數據源,用了union也用了union all,還有left join 和 inner join 及內連接的使用。

  現象: 打開列表頁面DB的使用率就高達30%

  優化點:

  1、在業務允許的情況下用union all 代替union

     union all 和 union 都是將兩個結果集合並,但是效率有所不同:

     a.對重復結果的處理:union 會篩選去掉結果集中重復數據,而union all 允許有重復數據;

     b.對排序的處理:union會按照字段進行排序,而union all 只是匯集結果后返回。

    所以union all 的效率會高於union,在業務允許的情況使用union all。

  2、left join 和 inner join的優化

     a.left join是左外連接,左邊主表的內容全部顯示出來,關聯表滿足條件就才顯示;

     b.inner join沒有主附表的區分,兩個表滿足關聯條件的都顯示出來(inner join簡寫就是join);

     優化點:left join是左外連接用在主表數據較少,從表數據量較大的時候;如果業務邏輯要求主表數據量比較大可以考慮inner join ,因為inner join返回結果的時候會自動選取數據量小的為基礎表(待驗證)。

  3、全連接效率最大,占用資源最多,盡量優化

 

  

 


免責聲明!

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



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