1. 程式人生 > >3.SQL優化之SELECT語句

3.SQL優化之SELECT語句

介紹

資料庫應用程式的核心邏輯是通過SQL語句執行的,無論是直接通過直譯器發出還是通過API在幕後提交。所以優化SQL語句是優化資料庫的重中之重。

1 優化SELECT語句

SELECT調優不光適用於以SELECT開始的SQL語句,也適用於DELETE語句中的CREATE TABLE … AS SELECT,INSERT INTO … SELECT和WHERE子句等構造。 這些語句需要考慮其他的效能影響因素,因為它們將寫操作與面向讀取的查詢操作相結合。

NDB Cluster支援連線下推優化,此功能在其他內容中講解。

SQL優化的主要因素:

  • 要使SELECT … WHERE查詢更快,首先應該想到的是增加索引,增加索引的方式一般是在where語句中使用的列上增加索引,索引不易過多欄位組合,這裡有個經驗值不超過3個欄位。
  • 最大限度地減少查詢中的全表掃描次數,尤其是對於大型表。
  • 通過定期使用ANALYZE TABLE語句使表統計資訊保持最新,因此優化程式具有構建有效執行計劃所需的資訊。
  • 瞭解不同引擎的調優技術,索引技術和配置引數。這部分後面會進行詳細講解。
  • 利用InnoDB的只讀事務,優化InnoDB的查詢事務。
  • 在優化程式自動執行某些相同轉換的情況下,儘量避免不易理解的方式轉換查詢。
  • 請通過閱讀EXPLAIN計劃並調整索引,WHERE子句,join子句等來調查特定查詢的內部詳細資訊。這部分後續詳細講解。
  • 調整MySQL用於快取的記憶體區域的大小和屬性。通過有效使用InnoDB buffer pool,MyISAM key cache和MySQL query cache,重複查詢執行得更快,因為在第二次及以後的時間內從記憶體中檢索結果。
  • 即使對於使用快取記憶體儲存區快速執行的查詢,可以進一步優化,以便它們需要更少的快取記憶體,從而使應用程式更具可伸縮性。 可伸縮性意味著應用程式可以處理更多的併發使用者,更大的請求等,而不會出現效能大幅下降的情況。
  • 處理鎖定問題,其中查詢的速度可能會受到同時訪問表的其他會話的影響。