龙空技术网

MySQL有哈希索引吗?

清风Charis 46

前言:

现时咱们对“mysql哈希索引”大致比较关怀,各位老铁们都需要了解一些“mysql哈希索引”的相关文章。那么小编同时在网络上汇集了一些关于“mysql哈希索引””的相关资讯,希望姐妹们能喜欢,我们快快来了解一下吧!

是否有Hash索引应该这样理解:

(1)InnoDB用户是无法创建Hash索引的

(2)InnoDB采用内部自适应建立哈希索引

例如select * from t where name='ls';name建了普通索引,发起普通索引查询时

(1)会先从普通索引查询出主键;(2)再由主键,从聚集索引上二次遍历定位到记录

不管聚集索引还是普通索引,记录定位的寻路路径(Search Path)都很长。

在MySQL运行的过程中,如果InnoDB发现,有很多SQL会命中相同的页,InnoDB会在Buffer里建立自适应哈希索引,以加速查询。简单理解就是“索引的索引”,key是索引键值(或者索引前缀),value是索引记录页面位置。

当为下面几种情况时适合开启自适应哈希索引:

如果存储的数据重复度很低,对该列数据以等值查询为主,没有范围查询、没有排序的时候,特别适合采用哈希索引

当为下面几种情况时不适合开启自适应哈希索引:

当业务有高并发的join操作,like操作和%的通配符操作自适应哈希索引中添加的read/write锁也会带来竞争,自适应哈希索引的维护反而可能成为负担,降低系统效率,此时可以手动关闭自适应哈希功能。

可以通过命令show variables like 'innodb_adaptive_hash_index'查看自适应哈希索引的状态

通过参数--skip-innodb-adaptive-hash-index关闭自适应哈希

标签: #mysql哈希索引