| 目的 | 命令/配置 |
|---|---|
| 記錄慢查詢 | |
| 查看表索引 | |
| 分析 SQL 索引使用 | |
| 導出 InnoDB 狀態到錯誤日誌 | |
| 定期清理二進制日誌 |
ID:主鍵MON_TIME:有索引 TSK_TASK_KEY_MON_TIMESTATUS_ID:外鍵關聯 SYS_HIER_INFO.ID,MySQL 自動建立索引 FK_task_status_id_TO_SYS_HIER_INFOSELECT * FROM TSK_TASK WHERE STATUS_ID = 1064 AND MON_TIME >= '2007-11-22' AND MON_TIME < '2007-11-23';
-- 掃描 88143 行,耗時 18 秒
possible_keys: FK_task_status_id_TO_SYS_HIER_INFO, TSK_TASK_KEY_MON_TIME
key: FK_task_status_id_TO_SYS_HIER_INFO -- 選擇了外鍵索引
rows: 276168
| 索引名 | Cardinality |
|---|---|
| PRIMARY | 999149 |
| FK_task_status_id_TO_SYS_HIER_INFO | 16 |
| TSK_TASK_KEY_MON_TIME | 13502 |
MySQL 傾向選擇 Cardinality 較小的索引(以為更精準),但實際導致大量回表掃描。調整 WHERE 字段順序無效,因優化器不看順序看統計信息。
FK_...,強制走 MON_TIME 索引。(STATUS_ID, MON_TIME)。大表索引維護耗時長,影響業務。按時間劃分實時表與歷史表,後台定期遷移數據,保證遷移時間極短,防死鎖。
客戶量達規模時,單庫無法支撐高並發。按客戶哈希/範圍將數據分散到多個數據庫,分擔負載,提升整體吞吐。
MySQL 優化是「工具診斷 → 索引重構 → 架構演進」的系統工程。慢查詢日誌是起點,EXPLAIN 是放大鏡,Cardinality 理解是關鍵,大表拆分是出路。