【InnoDB 存储引擎】15.5.3 Adaptive Hash Index(InnoDB 中的自适应哈希索引,加快连接或查询速度)

本文内容来自官网的翻译,是纯理论文章

1 什么是自适应哈希索引

自适应哈希索引使InnoDB能够在具有适当的工作负载组合和足够的缓冲池内存的系统上执行更像内存中的数据库,而不会牺牲事务特性或可靠性。自适应哈希索引由 innodb_adaptive_hash_index 变量启用,或在服务器启动时由 --skip-innodb-adaptive-hash-index 自适应哈希索引关闭

2 它的工作方式

哈希(hash)是一种非常快的查找方法,在一般情况下这种查找的时间复杂度为0(1),即一般仅需要一次查找就能定位数据。而B+树的查找次数,取决于B+树的高度,在生产环境中,B+树的高度一般为1〜3层,故需要1〜3次的查询

基于对搜索模式的观察,哈希索引用索引的前缀来构建。前缀可以是任何长度,哈希索引中的值可能仅仅是 B 树中的一部分,哈希索引在被经常访问的索引页上要求建立

对自适应哈希索引功能进行了分区。每个索引都绑定到一个特定的分区,每个分区都由一个单独的锁存器保护。分区由 innodb_adaptive_hash_index_parts 变量控制。 innodb_adaptive_hash_index_parts 变量默认设置为 8。最大设置为 512

3 优缺点

优点:

如果表被完全放在内存中,哈希索引可以加速查询通过直接查找任何元素,将索引值变成某种指针。InnoDB 有一个机制来监控索引,如果 InnoDB 注意到可以从构建哈希索引中获益,那么它会自动构建

缺点:

哈希索引有时会成为沉重的负载,例如多个并发的 join。LIKE 查询或 % 通配符查询不会获益。对于不能从哈希索引中获益的负载,建议关闭自适应哈希索引。因为很难判断自适应哈希索引是否针对当前系统受益,所以需要进行基准测试

4 监控自适应哈希索引的使用情况

你可以监控自适应哈希索引的使用,通过 SHOW ENGINE INNODB STATUS 输出的 SEMAPHORES 部分内容。如果有不少线程在等待 rw-latches 锁,那么考虑关闭自适应哈希索引或者增加分区的数量

5 特点

1、针对一般是二级索引起作用

2、适用于等值查询,不适用于非等值查询(如模糊查询、范围查询)。这是因为哈希算法决定的

6 参考资料

官网:< href=“https://dev.mysql.com/doc/refman/8.0/en/innodb-adaptive-hash.html”>https://dev.mysql.com/doc/refman/8.0/en/innodb-adaptive-hash.html

书籍:《InnoDB存储引擎》


传送门: 保姆式Spring5源码解析

欢迎与作者一起交流技术和工作生活

联系作者

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fire Fish

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值