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

MySQL 性能優化標準流程:從 SHOW STATUS 到 EXPLAIN 再到索引優化實戰

     編輯:MySQL 資料庫相關知識

優化四步法

  1. 了解 SQL 執行效率分布
  2. 定位低效 SQL
  3. EXPLAIN 分析執行計劃
  4. 確定問題並應用優化措施

步驟 1:SHOW STATUS 了解負載畫像

-- 當前會話統計
SHOW SESSION STATUS LIKE 'Com_%';

-- 全局統計(自啟動以來)
SHOW GLOBAL STATUS LIKE 'Com_%';

關鍵指標:

變量含義
Com_selectSELECT 執行次數
Com_insertINSERT 次數
Com_updateUPDATE 次數
Com_deleteDELETE 次數
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秒為慢查詢

SHOW STATUS輸出

步驟 2:開啟慢查詢日誌定位問題 SQL

修改 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

慢查詢示例

步驟 3:EXPLAIN 分析執行計劃

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

EXPLAIN無索引

EXPLAIN有索引

步驟 4:索引優化實戰與原則

創建索引

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 中不建索引無效索引佔空間

索引類型對比

  • PRIMARY KEY:主鍵,唯一且非空,聚簇索引。
  • UNIQUE:唯一索引,允許一個 NULL。
  • INDEX (NORMAL):普通索引,允許重複值。
  • FULLTEXT:全文索引,僅 MyISAM 支持 (5.6+ InnoDB 也支持),中文分詞建議用 Sphinx/Elasticsearch。

索引管理命令

-- 創建
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 分析 → 索引優化。
索引是銀彈,但有代價(寫入開銷、空間佔用),須遵循「高選擇性、低維護成本、實際被使用」原則。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved