本文内容来自官网的翻译,是纯理论文章
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源码解析
欢迎与作者一起交流技术和工作生活