-- 當前會話統計
SHOW SESSION STATUS LIKE 'Com_%';
-- 全局統計(自啟動以來)
SHOW GLOBAL STATUS LIKE 'Com_%';
關鍵指標:
| 變量 | 含義 |
|---|---|
Com_select | SELECT 執行次數 |
Com_insert | INSERT 次數 |
Com_update | UPDATE 次數 |
Com_delete | DELETE 次數 |
Connections | 連接嘗試次數 |
Uptime | 運行秒數 |
Slow_queries | 慢查詢次數 |
通過 Com_select : Com_insert : Com_update : Com_delete 比例判斷讀寫特徵。
SHOW VARIABLES LIKE 'long_query_time'; -- 默認 10秒
SET GLOBAL long_query_time = 2; -- 設置 2秒為慢查詢

修改 my.cnf ([mysqld] 區段):
long_query_time = 2
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
重啟服務生效。執行耗時 19s 的查詢:
SELECT * FROM order_copy WHERE id = 12345;
會被記錄到慢查詢日誌。
添加索引前:19s → 添加索引後:0.08s

EXPLAIN SELECT * FROM order_copy WHERE id = 12345;
核心列解讀:
| 列 | 關鍵含義 | 優化目標 |
|---|---|---|
type | 訪問類型:system > const > eq_ref > ref > range > index > ALL | 避免 ALL (全表掃描) |
possible_keys | 可能用到的索引 | 應有候選索引 |
key | 實際使用的索引 | 非 NULL |
key_len | 索引鍵長度 | 越短越好 |
rows | 預估掃描行數 | 越少越好 |
Extra | 額外信息 | 避免 Using filesort, Using temporary |


ALTER TABLE order_copy ADD PRIMARY KEY (id); -- 主鍵索引
-- 或
CREATE INDEX idx_id ON order_copy (id); -- 普通索引
1000 萬行數據添加主鍵耗時 ~7 分鐘 (428s)。
| 場景 | 建議 | 理由 |
|---|---|---|
| 頻繁作為 WHERE 條件 | 創建索引 | 加速查找 |
| 唯一性極差 (如性別) | 不創建單列索引 | 選擇度低,優化器不走索引 |
| 頻繁 UPDATE 的列 | 慎建索引 | 維護開銷大 |
| 不在 WHERE/JOIN/ORDER BY 中 | 不建索引 | 無效索引佔空間 |
-- 創建
CREATE INDEX idx_name ON tbl (col);
ALTER TABLE tbl ADD INDEX idx_name (col);
-- 查看
SHOW INDEX FROM tbl;
SHOW KEYS FROM tbl;
-- 刪除
DROP INDEX idx_name ON tbl;
ALTER TABLE tbl DROP INDEX idx_name;
-- 刪除主鍵 (特殊)
ALTER TABLE tbl DROP PRIMARY KEY;
MySQL 優化核心路徑:狀態監控 → 慢查詢日誌 → EXPLAIN 分析 → 索引優化。
索引是銀彈,但有代價(寫入開銷、空間佔用),須遵循「高選擇性、低維護成本、實際被使用」原則。