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

MySQL 內建工具優化實戰:SHOW STATUS、EXPLAIN 與 OPTIMIZE TABLE 深度應用

     編輯:MySQL 資料庫相關知識

SHOW STATUS / SHOW VARIABLES

mysql> SHOW STATUS;
-- 關鍵指標:
Aborted_connects      -- 連線失敗計數
Connections           -- 嘗試連線總數
Max_used_connections  -- 歷史峰值並發
Threads_connected     -- 當前連線數
Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests  -- 緩衝池命中率

配合 SHOW GLOBAL VARIABLES LIKE 'innodb_buffer_pool_size' 評估記憶體配置是否足夠。

EXPLAIN 實戰優化案例

原始 SQL(四表關聯)

EXPLAIN SELECT tt.ticketnumber, tt.timein, ..., do.custname
FROM tt, et, et AS et_1, do
WHERE tt.submittime IS NULL
  AND tt.actualpc = et.employid
  AND tt.assignedpc = et_1.employid
  AND tt.clientid = do.custnmbr;

表結構與索引

表欄位型別索引
ttactualpcchar(10)idx_actualpc
ttassignedpcchar(10)idx_assignedpc
ttclientidchar(10)idx_clientid
etemployidchar(15)PRIMARY
docustnmbrchar(15)PRIMARY

優化步驟

  1. 修正欄位長度不一致:tt.actualpc char(10) vs et.employid char(15) → ALTER TABLE tt MODIFY actualpc VARCHAR(15)。
    同理修正 assignedpc、clientid 為 VARCHAR(15)。
  2. 執行 ANALYZE TABLE 更新統計資訊:
    myisamchk --analyze /path/to/tt.MYI → mysqladmin refresh。

優化前後 EXPLAIN 對比

階段typerows 總乘積備註
原始ALL (全表掃描)45,268,558,720四表全掃描
修正長度後et: eq_ref, tt: ref...~3872 * 74 * 74消除一個全掃描
ANALYZE 後tt: ALL (where used), 其他 eq_ref3872優化器掌握數值分布,選擇最佳駕駛表

OPTIMIZE TABLE

  • 適用:MyISAM、InnoDB(實際執行 ALTER TABLE ... ENGINE=InnoDB 重建)。
  • 時機:大量 DELETE/UPDATE 變長欄位後,碎片率高。
  • 指令:OPTIMIZE TABLE tbl_name;(會鎖表,建議低峰期執行)。

工具箱總結

  • SHOW STATUS:宏觀健康度。
  • EXPLAIN:單條 SQL 執行計畫微觀分析。
  • OPTIMIZE TABLE:物理儲存整理。
  • 搭配 slow_query_log、pt-query-digest 持續優化。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved