文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  最佳化 SELECT 語句

10.2.1 最佳化 SELECT 語句

查詢,以 SELECT 語句的形式,執行資料庫中的所有查詢操作。調整這些語句是首要任務,無論是為了讓動態網頁達到亞秒級的回應時間,還是為了縮短產生龐大隔夜報表的時間。

除了 SELECT 語句之外,查詢的調整技術也適用於 CREATE TABLE...AS SELECTINSERT INTO...SELECT 等結構,以及 DELETE 語句中的 WHERE 子句。這些語句有額外的效能考量,因為它們將寫入操作與以讀取為導向的查詢操作結合在一起。

NDB Cluster 支援聯結下推最佳化,其中合格的聯結會完整傳送到 NDB Cluster 資料節點,它們可以在資料節點之間分散並並行執行。有關此最佳化的更多資訊,請參閱 NDB 下推聯結的條件

最佳化查詢的主要考量是

  • 要加速執行緩慢的 SELECT ... WHERE 查詢,首先要檢查的是是否可以加入索引。在 WHERE 子句中使用的欄位上設定索引,以加速評估、篩選以及最終結果的檢索。為了避免浪費磁碟空間,請建構一小組索引,以加速應用程式中使用的許多相關查詢。

    對於使用 聯結外鍵等功能引用不同表格的查詢來說,索引尤其重要。您可以使用EXPLAIN 陳述式來判斷哪個索引用於 SELECT。請參閱第 10.3.1 節,「MySQL 如何使用索引」第 10.8.1 節,「使用 EXPLAIN 優化查詢」

  • 隔離並調整查詢中任何耗費過多時間的部分,例如函式呼叫。根據查詢的結構方式,函式可能會針對結果集中的每一列呼叫一次,甚至針對表格中的每一列呼叫一次,大幅放大任何效率低下的情況。

  • 盡量減少查詢中的完整表格掃描次數,特別是對於大型表格。

  • 定期使用 ANALYZE TABLE 陳述式來保持表格統計資訊的最新狀態,以便最佳化工具具有建構有效率的執行計畫所需之資訊。

  • 了解特定於每個表格的儲存引擎的調整技術、索引技術和組態參數。InnoDBMyISAM 都有一套用於在查詢中啟用和維持高效能的指南。有關詳細資訊,請參閱第 10.5.6 節,「優化 InnoDB 查詢」第 10.6.1 節,「優化 MyISAM 查詢」

  • 您可以使用第 10.5.3 節,「優化 InnoDB 唯讀交易」中的技術,針對 InnoDB 表格優化單一查詢交易。

  • 避免以難以理解的方式轉換查詢,特別是如果最佳化工具會自動執行某些相同的轉換。

  • 如果效能問題不容易透過其中一項基本指南解決,請閱讀 EXPLAIN 計畫並調整索引、WHERE 子句、聯結子句等等,來調查特定查詢的內部詳細資訊。(當您達到一定程度的專業知識時,閱讀 EXPLAIN 計畫可能會成為您針對每個查詢的第一步。)

  • 調整 MySQL 用於快取的記憶體區域的大小和屬性。透過有效使用 InnoDB 緩衝池MyISAM 金鑰快取和 MySQL 查詢快取,重複查詢執行速度會更快,因為第二次及後續執行時會從記憶體檢索結果。

  • 即使對於使用快取記憶體區域快速執行的查詢,您仍然可以進一步優化,使其需要較少的快取記憶體,從而使您的應用程式更具可擴展性。可擴展性表示您的應用程式可以處理更多同時使用者、更大的請求等等,而不會發生大幅效能下降。

  • 處理鎖定問題,其中查詢的速度可能會受到其他同時存取表格的工作階段影響。