哈希索引
哈希索引
哈希索引是基于哈希表实现的,只有精确匹配索引所有的列的查询才会有效。
对于每行数据,存储引擎都会对所有的索引列计算一个哈希值,哈希值不同键值的行计算出来不同,哈希索引将所有的哈希值存储在索引中,同时在哈希表中保存指向每个数据行的指针。
Mysql 中只有 Memory 引擎显示支持哈希索引。哈希索引是 Memory 引擎表的默认索引。
如果多个列的哈希值相同,索引会以链表的方式存放多个记录指针到同一个哈希记录中。
哈希索引的缺点
哈希索引只包含哈希值和行指针,而不存储字段值,所以不能使用索引中的值来避免读取行
哈希索引数据并不是按照索引值顺序存储的,所以无法用于排序。
哈希索引也不支持部分索引列的匹配查找,因为哈希索引始终是使用索引列的全部内容来计算哈希值的。
哈希索引只支持等值比较查询,不支持任何范围查询
访问哈希索引的数据非常快,除非有很多哈希冲突。当出现哈希冲突的时候,存储引擎必须遍历链表中所有的行指针,逐行进行比较,直到找到所有符合条件的行。
如果哈希冲突很多的话,维护索引的代价也很高。
InnoDB 的自适应哈希索引
当 InnoDB 注意到某些索引值被使用得非常频繁时,它会在内存中基于 B-Tree 索引之上在创建一个哈希索引,让 B-Tree 索引具有哈希索引的优点,比如快速的哈希查找。
其他索引
除了哈希索引 B-Tree 索引外,还有其他的索引,比如空间数据索引,全文索引等等。
空间索引会从所有维度进行索引数据。查询时,可以有效的使用任意维度来组合查询
全文索引查找的是文本的关键词,而不是直接比较索引中的值。
总结
这篇文章我们重点讲解了哈希索引,哈希索引可以实现快速的哈希查找,除此以外还有其他索引比如空间索引、全文索引等等
版权声明: 本文为 InfoQ 作者【周杰伦本人】的原创文章。
原文链接:【http://xie.infoq.cn/article/2ba143b2ad7042a52da8f6d10】。文章转载请联系作者。
评论