SQL 執行頻率監控
-- 當前會話
SHOW SESSION STATUS LIKE 'Com_%';
-- 全域累計
SHOW GLOBAL STATUS LIKE 'Com_%';
EXPLAIN 核心欄位解讀
EXPLAIN SELECT * FROM zi_emp WHERE tid = 1000\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: zi_emp
type: ALL -- 關鍵:ALL=全表掃描,最差
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 2
Extra: Using where
type 類型效能排序(由好到壞)
system/const:單行查找(主鍵/唯一索引等值)
eq_ref:唯一索引掃描
ref:非唯一索引/前綴掃描
range:索引範圍掃描
index:索引全掃描
ALL:全表掃描(最差)
EXPLAIN EXTENDED + SHOW WARNINGS:查看優化器重寫後的 SQL
EXPLAIN EXTENDED SELECT * FROM zi_emp;
SHOW WARNINGS\G
-- 輸出優化器內部轉換後的標準化 SQL,可作為改寫參考
分區表專用:EXPLAIN PARTITIONS
EXPLAIN PARTITIONS SELECT * FROM zi_emp WHERE ...;
-- 顯示 partitions 欄位,確認分區裁剪是否生效
實戰優化清單
- 避免
SELECT *,只取需要欄位。
- WHERE 條件欄位建立索引,注意最左前綴原則。
- 用
EXPLAIN 確認 type 不為 ALL、key 有值、rows 掃描行數合理。
- 大表分區後,查詢條件務必包含分區鍵,否則會掃描全部分區。