MySQL的哈希索引

基于InnoDB存储引擎的哈希索引描述,帮助以后再合适的场景下选择正确的索引

什么是哈希索引

哈希索引基于哈希表实现,只有命中该索引的所有列时才会生效

聚簇索引的数据结构

根据所有索引列计算哈希值,把哈希值放在索引中,并记录哈希指向的数据指针

1
2
3
4
5
6
7
8
graph LR
哈希值1-->数据行1
哈希值2-->数据行2
哈希值3-->数据行3
哈希值4-->数据行4
哈希值1-->哈希2
哈希值2-->哈希3
哈希值3-->哈希4

优点

  • 哈希索引只支持等值比较查询,(=、in、<=>、)
  • 查询速度更快

缺点

  • 哈希索引只存储哈希值和数据行指针,不存储任何字段,所有无法避免数据行的读取
  • 哈希索引并不存在顺序,无法用于排序
  • 哈希索引需要根据所有索引列匹配,无法用部分列得到哈希值
  • 哈希索引没有存储字段,所以无法用于范围查询
  • 哈希索引在哈希冲突严重的时候,需要遍历所有冲突的数据,影响查询以及删除效率