1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-16 18:10:13 +08:00

update mysql/mysql-index.md

This commit is contained in:
jun 2023-08-07 11:40:48 +08:00
parent 6637e24696
commit be528b83fa

View File

@ -56,6 +56,8 @@ index = hash % array_size
为了减少 Hash 冲突的发生,一个好的哈希函数应该“均匀地”将数据分布在整个可能的哈希值集合中。
MySQL的InnoDB存储引擎不直接支持常规的哈希索引但是InnoDB存储引擎中存在一种特殊的“自适应哈希索引”Adaptive Hash Index自适应哈希索引并不是传统意义上的纯哈希索引而是结合了B+Tree和哈希索引的特点以便更好地适应实际应用中的数据访问模式和性能需求。自适应哈希索引的每个哈希桶实际上是一个小型的B+Tree结构。这个B+Tree结构可以存储多个键值对而不仅仅是一个键。这有助于减少哈希冲突链的长度提高了索引的效率。
既然哈希表这么快,**为什么 MySQL 没有使用其作为索引的数据结构呢?** 主要是因为 Hash 索引不支持顺序和范围查询。假如我们要对表中的数据进行排序或者进行范围查询,那 Hash 索引可就不行了。并且,每次 IO 只能取一个。
试想一种情况: