Archive 引擎專為數據歸檔、日志存儲設計,壓縮比達 InnoDB 的 1/10~1/15,犧牲索引與更新能力,換取極致存儲效率。
| 特性 | 支持 | 說明 |
|---|---|---|
| INSERT / REPLACE / SELECT | ✅ | 核心操作 |
| UPDATE / DELETE | ❌ | 不支持,數據不可變 |
| 索引(主鍵/唯一/普通) | ❌ | 全表掃描查詢 |
| 事務 | ❌ | 無 ACID 保證 |
| 壓縮算法 | zlib | 行級壓縮,插入時壓縮 |
| 鎖機制 | 行鎖 | 高並發插入無阻塞 |
| AUTO_INCREMENT | ✅ | 可非唯一,不允許插入小於當前最大值 |
| BLOB/TEXT | ✅ | 支持大字段 |
| 分區表 | ✅ | RANGE/LIST/KEY/HASH 全支持 |
.frm:表定義.ARZ:壓縮數據文件(zlib 流式壓縮)SELECT 或 FLUSH TABLE 觸發刷盤OPTIMIZE TABLE / REPAIR TABLE 重建壓縮,SHOW TABLE STATUS 查行數
CREATE TABLE tb_archive (
id INT NOT NULL,
name VARCHAR(30),
address VARCHAR(300),
mark TEXT
) ENGINE=ARCHIVE;
-- RANGE 分區
ALTER TABLE tb_archive PARTITION BY RANGE(id) (
PARTITION p0 VALUES LESS THAN (5),
PARTITION p1 VALUES LESS THAN (10),
PARTITION p2 VALUES LESS THAN (MAXVALUE)
);
-- LIST 分區
ALTER TABLE tb_archive PARTITION BY LIST COLUMNS(name) (
PARTITION a VALUES IN ('A','B'),
PARTITION b VALUES IN ('C'),
PARTITION c VALUES IN ('D')
);
-- KEY 分區
ALTER TABLE tb_archive PARTITION BY KEY(address) PARTITIONS 3;
| ✅ 適用 | ❌ 禁用 |
|---|---|
| 應用訪問日志、審計日志、錯誤日志 | 需要 UPDATE/DELETE 的業務表 |
| 監控指標歷史數據、埋點數據 | 需索引加速查詢的表 |
| 合規歸檔數據(寫一次、查極少) | 高併發讀取場景 |
| 大幅度壓縮歷史分區表 | 事務一致性要求場景 |
DROP PARTITION 清理過期數據ROW_FORMAT=COMPRESSED)或 ClickHouse/Elasticsearchmysqldump --single-transaction 或直接複製 .ARZ/.frm 文件(需同版本 MySQL 恢復)Archive 是「寫時只讀」場景的極致優化選擇,用對場景省 90% 存儲成本。