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

MySQL 內建效能分析工具實戰:SHOW STATUS 與 EXPLAIN 執行計劃深度解析

     編輯:MySQL 資料庫相關知識

SHOW STATUS:伺服器健康儀表板

mysql> SHOW STATUS;

關鍵指標

變數含義異常判讀
Aborted_connects嘗試連線失敗次數暴增 → 攻擊/網路/認證配置錯誤
Connections總連線嘗試次數配合 Uptime 算 QPS
Max_used_connections歷史峰值併發連線接近 max_connections → 需擴容
Threads_connected當前開啟連線數即時負載
Slow_queries慢查詢計數持續增長 → 需分析慢查詢日誌
Innodb_buffer_pool_readsBuffer Pool 未命中需讀磁碟高 → 增加 innodb_buffer_pool_size
Innodb_row_lock_waits行鎖等待次數高 → 熱點行爭用,優化索引/事務

SHOW 進階用法

SHOW PROCESSLIST;          -- 當前執行緒,找長時間運行/鎖等待
SHOW ENGINE INNODB STATUS; -- InnoDB 內部狀態 (死鎖、鎖等待、Buffer Pool)
SHOW VARIABLES LIKE 'innodb%'; -- 確認參數生效
SHOW TABLE STATUS LIKE 'tbl';  -- 表統計 (行數、大小、索引長度、自增值)

EXPLAIN:執行計劃深度解析

EXPLAIN SELECT * FROM orders
JOIN customers ON orders.cust_id = customers.id
WHERE orders.status = 'paid';

關鍵欄位解讀

欄位核心值優化方向
idSELECT 識別號衍生表/子查詢層級
select_typeSIMPLE/PRIMARY/SUBQUERY/DERIVED/UNIONDERIVED/SUBQUERY 易產生臨時表
table存取表名關注驅動表順序
typesystem/const/eq_ref/ref/range/index/ALL避免 ALL (全表掃描),至少達到 range/ref
possible_keys可能用到的索引為空 → 無索引可用
key實際使用索引與 possible_keys 差異大 → 統計資訊過期
key_len使用索引長度複合索引判斷用到幾欄
ref關聯比較依據const/func/欄位名
rows預估掃描行數越小越好,配合 filtered 看過濾率
filtered條件過濾後剩餘比例低 → 索引選擇性差
ExtraUsing index/Using where/Using filesort/Using temporaryUsing filesort/temporary 為優化重點

實戰優化案例:多表聯結優化

-- 原始:四表全關聯 (type=ALL, rows=45億)
EXPLAIN SELECT ... FROM tt, et, et et_1, do WHERE ...;

-- 問題:tt.ActualPC CHAR(10) vs et.EMPLOYID CHAR(15) 長度不符,索引失效
-- 解決:統一欄位長度 ALTER TABLE tt MODIFY ActualPC CHAR(15);
-- 或 ALTER TABLE et MODIFY EMPLOYID CHAR(10);

-- 優化後:type=ref, rows 大幅下降

統計資訊維護

ANALYZE TABLE tbl;          -- 更新索引基數統計
OPTIMIZE TABLE tbl;         -- 整理碎片 + 更新統計 (鎖表)
-- InnoDB 線上 DDL (5.6+) 可減少鎖定時間
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved