首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

EXPLAIN 實戰:從全表掃描到 Ref 連接,SQL 調優全過程

     編輯:MySQL 資料庫相關知識

EXPLAIN 關鍵欄位速查

欄位含義關注重點
select_type查詢類型SIMPLE、PRIMARY、SUBQUERY、DERIVED 等
table輸出結果集的表驅動表、被驅動表順序
type連接類型system > const > eq_ref > ref > range > index > ALL,ALL=全表掃描需優化
possible_keys可能用到的索引候選索引
key實際使用的索引NULL=未用索引
key_len索引長度判斷複合索引用了幾個欄位
rows預估掃描行數越小越好
Extra執行情況說明Using index、Using where、Using temporary、Using filesort 等

實戰案例:優化前後對比

優化前:sales 表全表掃描 (type=ALL)

EXPLAIN SELECT SUM(moneys) FROM sales a, companys b
WHERE a.company_id = b.id AND a.year = 2006;

-- 結果片段
table | type | possible_keys | key  | key_len | rows | Extra
b     | index| PRIMARY       | PRIMARY| 4     | 1    | Using index
a     | ALL  | NULL          | NULL  | NULL   | 12   | Using where

對 sales.year 建立索引後:type 變 ref,rows 12→3

CREATE INDEX idx_year ON sales(year);

EXPLAIN SELECT SUM(moneys) FROM sales a, companys b
WHERE a.company_id = b.id AND a.year = 2006;

-- 結果片段
table | type | possible_keys | key  | key_len | rows | Extra
b     | index| PRIMARY       | PRIMARY| 4     | 1    | Using index
a     | ref  | year          | year  | 4     | 3    | Using where

調優閉環

  1. 慢查詢日誌 / SHOW PROCESSLIST 定位問題 SQL。
  2. EXPLAIN 分析執行計畫,找出 ALL、Using temporary、Using filesort。
  3. 補索引、改寫 SQL、調整連接順序。
  4. 再次 EXPLAIN 驗證 type 提升、rows 下降。
  5. 上線觀察慢查詢日誌確認生效。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved