文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  優化 SELECT 語句

10.2.1 優化 SELECT 語句

查詢(以 SELECT 語句的形式)會在資料庫中執行所有查詢作業。調整這些語句是首要任務,無論是要為動態網頁實現次秒回應時間,還是要將產生大量夜間報告的時間縮短數小時。

除了 SELECT 語句之外,查詢的調整技術也適用於諸如 CREATE TABLE...AS SELECTINSERT INTO...SELECTDELETE 語句中的 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 查詢快取,重複查詢的執行速度會更快,因為結果會在第二次及後續時間從記憶體中擷取。

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

  • 處理鎖定問題,您的查詢速度可能會受到其他同時存取資料表的會話影響。