写点什么

哈希索引

作者:周杰伦本人
  • 2022 年 9 月 09 日
    贵州
  • 本文字数:682 字

    阅读完需:约 2 分钟

哈希索引

哈希索引是基于哈希表实现的,只有精确匹配索引所有的列的查询才会有效。


对于每行数据,存储引擎都会对所有的索引列计算一个哈希值,哈希值不同键值的行计算出来不同,哈希索引将所有的哈希值存储在索引中,同时在哈希表中保存指向每个数据行的指针。


Mysql 中只有 Memory 引擎显示支持哈希索引。哈希索引是 Memory 引擎表的默认索引。


如果多个列的哈希值相同,索引会以链表的方式存放多个记录指针到同一个哈希记录中。

哈希索引的缺点

哈希索引只包含哈希值和行指针,而不存储字段值,所以不能使用索引中的值来避免读取行


哈希索引数据并不是按照索引值顺序存储的,所以无法用于排序。


哈希索引也不支持部分索引列的匹配查找,因为哈希索引始终是使用索引列的全部内容来计算哈希值的。


哈希索引只支持等值比较查询,不支持任何范围查询


访问哈希索引的数据非常快,除非有很多哈希冲突。当出现哈希冲突的时候,存储引擎必须遍历链表中所有的行指针,逐行进行比较,直到找到所有符合条件的行。


如果哈希冲突很多的话,维护索引的代价也很高。

InnoDB 的自适应哈希索引

当 InnoDB 注意到某些索引值被使用得非常频繁时,它会在内存中基于 B-Tree 索引之上在创建一个哈希索引,让 B-Tree 索引具有哈希索引的优点,比如快速的哈希查找。

其他索引

除了哈希索引 B-Tree 索引外,还有其他的索引,比如空间数据索引,全文索引等等。


空间索引会从所有维度进行索引数据。查询时,可以有效的使用任意维度来组合查询


全文索引查找的是文本的关键词,而不是直接比较索引中的值。

总结

这篇文章我们重点讲解了哈希索引,哈希索引可以实现快速的哈希查找,除此以外还有其他索引比如空间索引、全文索引等等

发布于: 刚刚阅读数: 5
用户头像

还未添加个人签名 2020.02.29 加入

公众号《盼盼小课堂》,多平台优质博主

评论

发布
暂无评论
哈希索引_9月月更_周杰伦本人_InfoQ写作社区