復雜sql優化步驟與技巧


     數據管理型系統,由於用戶的要求或者系統設計要求,會出現大量表進行join,還要進行大量統計性數據查詢展示,甚至數據權限控制等操作。最后會導致sql異常復雜,隨着數據量增加,或者只是應用到生產環境(正式環境)就會出現系統反應慢,體驗差的現象,這個時候不得不對這些,復雜的sql進行優化。沒有經驗的程序員會感覺無從下手,這么復雜的sql語句看一眼就頭疼,該怎么辦呢?

    根據個人的工作經驗提供一下優化步驟:

首先要對sql語句進行格式化,使sql條理清晰,甚至分步驟添加注釋,弄清楚每個步驟是為了得到什么;

第二步,用第一部格式化過的sql與最終需求做對比,沒有用的表,就不要進行join了,沒有用的字段也不要進行返回了。

第三步,分模塊檢查子查詢,到底是哪個表查詢速度慢,或者哪個條件導致的查詢速度慢。

 

第四步,配合sql執行計划,這個由於自己也不擅長看執行計划,只能盡量避免全表掃描,提前限制sql數據篩選范圍。

第五步,檢查是否用了不合適的in查詢,過量的in會導致效率驟然降低很多。

第六步,檢查是否存在過多的or查詢,or會導致全表掃描,能避免盡量避免。

第七步,檢查子查詢是否過於復雜,或者sql處理是否過於復雜,如果可以將復雜處理放到程序中進行。

 

第八步,可以用exists替代的地方,用exists進行替代。

第九步,可以建視圖,對sql進行簡化,至於視圖是否可以提高查詢效率,我也不知道,還需要學習研究。

 

以上步驟准確的說,是可以采取的方法,除了前幾條,其他的沒有先后順序。

這些心得是在老大指導進行sql優化時的心得,記錄下來既可以總結自己的收獲,也希望能與大家的觀點碰撞,相互進步!

 

-----------------------------------------

2018-05-08  更新

自己進行sql速度優化時的感悟心得。

建表時注意:

1,不要用判斷值的方法,代替狀態字段,建表時應該建狀態字段,不能省略;

因為用判斷某個字段的值判斷狀態,可能需要使用轉換函數或者isNull判斷,會影響查詢速度。

2,應該在程序中保持數據的一致性,而不是使用sql,防止查詢時可能需要or判斷,or判斷會影響sql查詢速度;

3,嚴格控制字段的類型,不要使用過大的字段,或者不必要的增大字段長度;

 


免責聲明!

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



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