【MySQL】自适应哈希详解:作用、配置以及如何查看

发布于:2025-05-15 ⋅ 阅读:(13) ⋅ 点赞:(0)

📢博客主页:https://blog.csdn.net/2301_779549673
📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 JohnKi 原创,首发于 CSDN🙉
📢未来很长,值得我们全力奔赴更美好的生活✨

在这里插入图片描述

在这里插入图片描述


前些天发现了一个巨牛的 人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到 网站


🏳️‍🌈一、自适应哈希索引的作用?

  • 自适应哈希索引可以使 InnoDB 存储引擎在不牺牲 事务特性可靠性 以及 缓冲池空间足够 的前提下提升效率,使用起来更像是一个内存数据库,哈希索引根据经常访问的索引页自动构建;
  • 根据InnoDB内部的监控机制,如果监控到某些查询通过建立哈希索引可以提高性能,则自动对这个页创建哈希索引,这个过程称为 自适应,所以叫自适应哈希索引;
  • 如果表完全放在内存中,则哈希索引可以通过直接查找任何元素来加快查询速度

1.1 为什么要创建自适应哈希索引?

  • InnoDB存储引擎的数据存储于B+树中,B+树通常只有3到5层,但从根节点到叶节点的寻路涉及到多层页面内记录的比较,即使所有路径上的页面都在内存中,也非常消耗CPU的资源
  • InnoDB对寻路的开销进行了优化,比如寻路结束后将cursor缓存起来方便下次查询复用,尽可能的避免单词寻路开销,Adaptive hashindex(AHI)便是为此而设计,可以理解为B+树的索引
  • 本质上是通过缩短寻路路径(SearchPath)从,而提升MySOL查询性能的一种方式

1.2 自适应哈希索引的Key-Value如何设置?

以查询条件为 key,B+树页的地址为 value 的 HashIndex

1.3 自适应哈希索引在保存在哪里?

自适应哈希索引会占用缓冲池一部分内存区域,在缓冲池初始化后被初始化,为了避免AHI的锁竞争压力,AHI支持分区,可以使用 innodb_adaptive_hash_index_parts 参数配置分区个数,默认为8。

注意: 自适应哈希索引是InnoDB内部的优化方式,外部不能干预

🏳️‍🌈二、关于自适应哈希索引有哪些配置项?

通过设置系统变量 innodb_adaptive_hash_index 开启或关闭自适应哈希索引在选项文件中设置系统变量

  • innodb_adaptive_hash_index = [ 1 | 0 ]实现开启与关闭
  • 通过命令行选项 --skip-innodb-adaptive-hash-index 也可以关闭自适应哈希索引

每个自适应散列索引被绑定到不同的分区中,每个分区有不同的锁保护,分区数量由系统变量innodb_adaptive_hash_index_parts 控制,默认值为8,最大值为 512。

🏳️‍🌈三、怎么查看自适应哈希索引的信息?

通过使用 SHOW ENGINE InnODB STATUS 访问 InnoDB 标准监视器输出中 INSERT BUFFERAND ADAPTIVE HASH INDEX 部分查看自适应哈希索引使用信息,如果锁争抢过多,可以考虑增加自适应哈希索引分区数量或禁用自适应哈希索引。

mysql> SHOW ENGINE INNODB STATUS\G
*************************** 1. row ***************************
Type: InnoDB
Name:
Status:
=====================================
... # 省略
-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 1, free list len 0, seg size 2, 0 merges
merged operations:
insert 0, delete mark 0, delete 0
discarded operations:
insert 0, delete mark 0, delete 0
# 字节为单位,占⽤内存空间总量
Hash table size 34679, node heap has 0 buffer(s)
Hash table size 34679, node heap has 0 buffer(s)
Hash table size 34679, node heap has 0 buffer(s)
Hash table size 34679, node heap has 0 buffer(s)
Hash table size 34679, node heap has 4 buffer(s)
Hash table size 34679, node heap has 0 buffer(s)
Hash table size 34679, node heap has 0 buffer(s)
Hash table size 34679, node heap has 1 buffer(s)
# 计算⾃适应hash索引带来的收益以及付出,确定是否开启⾃适应hash索引
0.00 hash searches/s, 0.00 non-hash searches/s

👥总结

本篇博文对 【MySQL】自适应哈希详解:作用、配置以及如何查看 做了一个较为详细的介绍,不知道对你有没有帮助呢

觉得博主写得还不错的三连支持下吧!会继续努力的~