| 維度 | Hash 索引 | B-Tree 索引 |
|---|---|---|
| 底層結構 | 哈希表 | 平衡樹 |
| 查找複雜度 | O(1) 一次定位 | O(log N) 多層遍歷 |
| 等值查詢 (=, IN, <=>) | 極快 | 快 |
| 範圍查詢 (>, <, BETWEEN, LIKE) | 不支援 | 支援 |
| 排序優化 (ORDER BY) | 不支援 | 支援(索引有序) |
| 最左前綴原則 | 不支援(組合鍵整體 Hash) | 支援 |
| 覆蓋索引掃描 | 不可避免回表(Hash 值衝突需比對原值) | 支援 |
| 適用引擎 | Memory、NDB Cluster | InnoDB、MyISAM、InnoDB 默認 |
ORDER BY 仍需 filesort。(a,b) Hash 是對 a+b 整體 Hash,單查 a 無法命中。USING HASH 極快。USING BTREE(默認)。-- Memory 表指定 Hash
CREATE TABLE t (id INT PRIMARY KEY, val VARCHAR(20)) ENGINE=MEMORY;
CREATE INDEX idx_val ON t (val) USING HASH;
-- InnoDB 無法指定 Hash,隱式自適應哈希索引 (AHI) 由引擎自動管理
InnoDB 的自適應哈希索引 (AHI) 會在熱點頁面上自動構建 Hash 索引加速等值查詢,屬於引擎內部優化,用戶無感知、無法干預,但可通過
innodb_adaptive_hash_index=OFF關閉。