基本特性
- 由
myisampack 工具創建,只讀格式。
- 所有 MySQL 發布版默認包含
myisampack。
- 可用
myisamchk 解壓縮恢復為普通 MyISAM 表。
核心優勢
- 極小磁盤佔用:最小化 I/O,適合只讀介質(CD-ROM、只讀分區、歸檔存儲)。
- 記錄級獨立壓縮:隨機訪問開銷極低,記錄頭 1-3 字節(視最大記錄長度)。
- 列級差異化壓縮:每列獨立 Huffman 樹,多種壓縮類型自動組合:
- 後綴空間壓縮
- 前綴空間壓縮
- 零值位圖存儲(1 bit)
- 整數列動態縮容(如
BIGINT 實際范圍在 -128~127 → 存為 TINYINT)
- 低基數列自動轉
ENUM
- 上述類型任意組合
支持定長/動態長記錄:自適應行格式。
創建與使用
# 1. 停止寫入,備份原表
# 2. 壓縮
myisampack tbl_name.MYI
# 3. 重建索引(必須)
myisamchk -rq tbl_name.MYI
# 4. 表現為只讀,INSERT/UPDATE/DELETE 將報錯
適用場景
- 數據倉庫歸檔分區(歷史日誌、報表快照)。
- 只讀分發介質(安裝光盤、只讀掛載點)。
- 嵌入式設備存儲受限環境。
- 大量只讀查詢、極少寫入的查詢服務節點。
限制與注意
- 完全只讀:任何 DML 操作均失敗。
ALTER TABLE、DROP INDEX 等 DDL 亦不可用。
- 壓縮後無法再次壓縮,需解壓後重新壓縮。
- InnoDB 不支持壓縮表(InnoDB 有自帶頁壓縮
COMPRESSED 行格式)。
- MySQL 8.0 仍支持但官方建議改用 InnoDB 透明頁壓縮或列存引擎。