数据库中使用哈希索引(Hash Index),主要是因为它在等值查询(=)场景下极快,能在O(1) 时间复杂度内定位数据。下面从原理、优点、局限性和适用场景几个方面来解释。
哈希索引的核心是 哈希表(Hash Table):
hash(key))查询过程类似:
key → hash(key) → bucket → data pointer → data
对于 精确匹配查询:
SELECT * FROM user WHERE id = 1001;
哈希索引在理想情况下是 O(1),速度远快于 B+ 树索引的 O(log n)。
哈希索引非常适合放在内存中:
因为:
数据库在执行 SQL 时,内部也会用到哈希思想:
GROUP BYDISTINCTJOIN(Hash Join)即使不显式建哈希索引,数据库内部仍然广泛使用哈希结构。
WHERE age > 20
WHERE salary BETWEEN 5000 AND 10000
哈希索引 完全无法支持,因为:
ORDER BY col
LIKE 'abc%'
哈希索引:
不同的 key 可能映射到同一个桶:
所以主流磁盘数据库默认不用哈希索引做主键索引。
| 对比项 | 哈希索引 | B+ 树索引 |
|---|---|---|
| 等值查询 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| 范围查询 | ❌ | ✅ |
| 排序 | ❌ | ✅ |
| 磁盘友好 | ❌ | ✅ |
| 最左前缀 | ❌ | ✅ |
| 内存场景 | ✅ | 一般 |
USING hash 索引数据库用哈希索引,主要是为了在等值查询场景下获得极致性能,尤其适合内存环境,但由于不支持范围和排序,无法替代 B+ 树索引。
如果你愿意,我也可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。