| 場景 | MyISAM | InnoDB | BDB |
|---|---|---|---|
| 固定長 CHAR | ⭐⭐⭐ 最快 | ⭐⭐ 同 VARCHAR | ⭐⭐ 差異小 |
| 可變長 VARCHAR | ⭐⭐ 碎片多 | ⭐⭐⭐ 空間少、I/O 少 | ⭐⭐ 差異小 |
| 大量 UPDATE/DELETE | 碎片嚴重需 OPTIMIZE | MVCC 版本鏈、自動清理 | 頁鎖爭用 |
SELECT * FROM tbl PROCEDURE ANALYSE();
SELECT * FROM tbl PROCEDURE ANALYSE(16, 256); -- 限制:>16 個值或 >255 位元組不建議 ENUM
輸出包含:建議型別、最小/最大值、NULL 比例、ENUM 值列表等。
OPTIMIZE TABLE tbl; 重建表、索引、統計mysqldump --opt db tbl > dump.sql; mysql db < dump.sql 重建全表ALTER TABLE tbl ENGINE=InnoDB; 線上重建(5.6+ Online DDL)CREATE TABLE tbl_blob (id BIGINT PRIMARY KEY, data LONGBLOB),主表保留固定長欄位ALTER TABLE tbl ADD hash CHAR(32), ADD INDEX idx_hash (hash); 以 MD5(data) 查詢SELECT * 拖回大物件,明確列出欄位-- 插入時
INSERT INTO tbl (data, hash) VALUES (?, MD5(?));
-- 查詢
SELECT * FROM tbl WHERE hash = MD5(?); -- 精確匹配極快
-- 篩選後再取大物件
SELECT id FROM tbl WHERE hash = MD5(?);
-- 應用層再按 id 取 data
適用:精確匹配、去重、大物件比對。不適用:範圍查詢、排序。