面對問題先定位,再解決。本文總結五大定位手段。
SHOW STATUS LIKE 'Com_%';
Com_xxx 顯示各類語句執行次數。參考:MySQL SHOW STATUS 詳解、中文詳細版。

EXPLAIN SELECT ...;

| 欄位 | 含義 | 關鍵值 |
|---|---|---|
| select_type | 查詢類型 | SIMPLE、PRIMARY、UNION、SUBQUERY |
| type | 訪問類型 | ALL(全掃)、index、range、ref、eq_ref、const/system、NULL |
| possible_keys | 可能用到的索引 | - |
| key | 實際用到的索引 | - |
| key_len | 索引欄位長度 | - |
| rows | 預估掃描行數 | - |
| Extra | 執行情況描述 | Using index、Using where、Using filesort 等 |
EXPLAIN EXTENDED SELECT ...; SHOW WARNINGS;
輸出多 filtered 欄位(返回行數/檢查行數 × 100%);SHOW WARNINGS 的 Message 可見優化器重寫後的 SQL。

SELECT @@have_profiling; -- 是否支援 SELECT @@profiling; -- 是否開啟 SET profiling = 1; -- 開啟 -- 執行目標 SQL SHOW PROFILES; -- 列出最近查詢 ID SHOW PROFILE FOR QUERY n; -- 看某查詢各階段耗時

Sending data:線程開始訪問數據行並向客戶端發送,不僅是網路傳輸。
SET optimizer_trace="enabled=on", end_markers_in_json=on; SET optimizer_trace_max_mem_size=100000; -- 執行目標 SQL SELECT * FROM information_schema.OPTIMIZER_TRACE;

配置 slow_query_log=1、long_query_time=0.05,配合 pt-query-digest 分析,建議接入 Anemometer 管理平台。