| 類型 | 特點 | 適用場景 |
|---|---|---|
| 靜態 MyISAM | 定長行、最快掃描、崩潰易恢復、佔空間大 | 無 VARCHAR/BLOB/TEXT 的高頻讀表 |
| 動態 MyISAM | 變長行、位圖標記空值、易產生碎片、需定期 OPTIMIZE | 含變長列的通用表 |
| 壓縮 MyISAM | myisampack 生成、唯讀、極省空間、單行解壓開銷小 | 歸檔、歷史、只讀數據集 |
| HEAP (MEMORY) | 純內存、哈希索引、極快、重啟丟失、不支援範圍查詢 | 小型查找表、臨時聯結加速 |
-- 原查詢:三表聯結慢
SELECT tab1.a, tab3.a FROM tab1, tab2, tab3
WHERE tab1.a=tab2.a AND tab2.a=tab3.a AND tab2.c!=0;
-- 優化:將 tab2+tab3 聯結結果物化到 HEAP 表
CREATE TEMPORARY TABLE test TYPE=HEAP
SELECT tab2.a AS a2, tab3.a AS a3 FROM tab2, tab3
WHERE tab2.a=tab3.a AND tab2.c=0;
SELECT tab1.a, test.a3 FROM tab1, test WHERE tab1.a=test.a2;
table_cache 減少緩存抖動mysqladmin status 中 Open_tables > 實際表數屬正常(多線程並發各自打開)長 SELECT → UPDATE 等待 → 新 SELECT 被 UPDATE 阻塞 → 雙重等待。
--low-priority-updates 啟動參數 / SET SQL_LOW_PRIORITY_UPDATES=1LOW_PRIORITY (INSERT/UPDATE/DELETE) / HIGH_PRIORITY (SELECT)max_write_lock_count 閾值觸發讀插隊INSERT DELAYED 隊列化寫入DELETE ... LIMIT 分批刪除易碎片操作:頻繁 VARCHAR 更新、大量 BLOB/TEXT 刪改、大批量刪除。
優化命令:
OPTIMIZE TABLE tbl_namemyisamchk -r / isamchk -r黃金原則:低峰期執行、確保無業務訪問、備份後操作。