資料庫長期運行後會產生碎片、統計資訊過時、索引效能下降等問題。本文系統介紹MySQL表維護三大核心命令(ANALYZE、CHECK、OPTIMIZE)的使用時機與語法,並深度解析大批量插入與INSERT優化的多種實戰技巧。
ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...
READ LOCK,適用MyISAM/InnoDB/BDBANALYZE TABLE table_name;
CHECK TABLE tbl_name [, tbl_name] ... [option]
option = {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}
OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...
OPTIMIZE TABLE table_name;
ALTER TABLE tbl_name DISABLE KEYS;
LOAD DATA INFILE 'data.txt' INTO TABLE tbl_name;
ALTER TABLE tbl_name ENABLE KEYS;
LOAD DATA INFILE比多條INSERT快約20倍SET UNIQUE_CHECKS=0;
-- 導入數據
SET UNIQUE_CHECKS=1;
SET AUTOCOMMIT=0;
-- 批量導入
SET AUTOCOMMIT=1;
INSERT INTO t VALUES (1,2),(3,4),(5,6)減少客戶端往返開銷.MYI與.MYD提升I/O並行OPTIMIZE耗時長,建議配合pt-online-schema-change類工具線上執行Handler_read_rnd_next狀態值,持續偏高說明索引失效或全表掃描頻發系統性的維護機制配合針對性的導入優化,是維持MySQL長期高效運行的基石。