優化 SQL SELECT 語句性能


SELECT語句的性能調優有時是一個非常耗時的任務,在我看來它遵循帕累托原則。20%的努力很可能會給你帶來80%的性能提升,而為了獲得另外20%的性能提升你可能需要花費80%的時間。

檢查索引:在SQL語句的WHERE和JOIN部分中用到的所有字段上,都應該加上索引;

限制工作數據集的大小:檢查SELECT語句中用到的表,看看是否可以應用WHERE子句進行過濾;當表中只有幾千行記錄時,一個查詢能夠很好地執行,但隨着應用程序的成長,查詢慢了下來;解決方案是:限制查詢來查看當前月的數據即可,當查詢語句帶有子查詢時,注意在子查詢的內部語句上使用過濾,而不是在外部語句上。

只選擇需要的字段:額外的字段通常會增加返回數據的紋理,從而導致更多的數據被返回到SQL客戶端。

          •使用帶有報告和分析功能的應用程序時,有時報告性能低是因為報告工具必須對收到的、帶有詳細形式的數據做聚合操作

          •偶爾查詢也可能運行地足夠快,但問題可能是一個網絡相關的問題,因為大量的詳細數據通過網絡發送到報告服務器

          •當使用一個面向列的DBMS時,只有選擇的列會從磁盤讀取。在查詢中包含的列越少,IO開銷就越小

移除不必要的表:移除不必要的表的原因,和移除查詢語句中不需要的字段的原因一致

        編寫SQL語句是一個過程,通常需要大量編寫和測試SQL語句的迭代過程;在開發過程中,將表添加到查詢中,而這對於SQL代碼返回的數據可能不會有任何影響;一旦SQL運行正確,發現許多人不會回顧他們的腳本,不會刪除那些對最終的返回數據沒有任何影響和作用的表;通過移除與那些不必要表的JOINS操作,減少了大量數據庫必須執行的流程;有時,就像移除列一樣,會發現減少的數據又通過數據庫返回來了

移除外部連接查詢:它取決於改變表的內容有多大的影響;一個解決辦法是通過在兩個表的行中放置占位符來刪除OUTER JOINS操作。

刪除JOIN和WHERE子句中的計算字段:它取決於更改表模式的權限大小,可以將連接語句中用到的計算字段作為一個新字段在表中創建


免責聲明!

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



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