MySQL性能优化:深入理解InnoDB的自适应哈希索引

前言

​ MySQL的自适应哈希索引(Adaptive Hash Index,简称AHI)是InnoDB存储引擎的一项关键特性,旨在提升查询性能和数据库的整体性能。自适应哈希索引通过动态调整哈希表的大小,使其"刚刚好",从而优化查询效率。这种索引技术在特定场景下能够显著提升查询性能,是一种高效的索引优化技术。

原理
理念

​ InnodB存储引擎会监控对表上各索引页的查询。如果观察到建立哈希索引可以带来速度提升,则建立哈希索引,称之为自适应哈希索引(Adaptive Hash Index,AHI)。

​ AHI是通过缓冲池的B+树页构造而来,因此建立的速度很快,而且不需要对整张表构建哈希索引,只是对热点页建立hash索引。InnoDB存储引擎会自动根据访问的频率和模式来自动地为某些热点页建立哈希索引。

由以上描述可知,自适应 hash 索引是对B+数的某个数据页进行构造,即 hash(key) = 记录所在数据页的位置

优化

​ 自MySQL 5.7版本起,AHI的实现引入了分区机制,每个索引被分配到独立的分区,并由各自的锁存器进行保护,这一改进有效降低了高并发环境下的锁竞争问题。

满足条件

​ AHI要求对某个页的连续访问模式一样,比如对于(a,b)这样的联合索引页,存在下面两种情况:

sql 复制代码
where a = xxx;
where a = xxx and b=xxx

​ 如果每次都查询条件一样,但是交替出现上面两种查询,那么InnoDB不会建立Hash索引,如果只出现一个查询,然后再满足下面的要求,InnoDB就会建立自适应Hash索引:

  1. 以该模式(同样的等值查询条件)访问了100次
  2. 页通过该模式访问了N次,N = 页记录/16
配置

​ 数据库管理员可以通过配置参数innodb_adaptive_hash_index来控制AHI特性的启用与禁用,此特性默认处于启用状态,以便自动优化数据库性能。

Reference
  1. 爱可生开源社区. (2020). 图解MySQL | 原理解析 Adaptive Hash Index 是如何建立的. 访问自:链接
  2. 墨天轮. (无日期). 自适应哈希索引,你真的了解吗?. 访问自:链接
相关推荐
小白说大模型20 小时前
AI驱动的个性化学习路径:知识图谱与知识点关联的存储与推理
大数据·人工智能·学习·mysql·机器学习·prompt·知识图谱
这个DBA有点耶20 小时前
多模数据库深度解读:从“多库拼装”到“一库多能”的架构演进
数据库·mysql·dba
程序员夏洛20 小时前
MySQL 默认的事务隔离级别是什么?为什么选择这个级别?
数据库·mysql
卓怡学长21 小时前
w180springboot基于Java的悠扬乐器管理
java·spring boot·mysql·spring·maven·intellij-idea
( •̀∀•́ )92021 小时前
MySQL 自动备份与恢复方案
数据库·mysql·oracle
这个DBA有点耶1 天前
大事务的“事前预防”:监控、拦截、Kill,四层防线一次讲透
数据库·mysql·代码规范
NutShell Wang1 天前
Firecrawl anydoc 实战拆解:用一个 Rust 依赖吃下 14 种文档格式
性能优化·rust·vibe coding
nvd111 天前
LiteLLM 与 Redis 响应缓存机制:从精确哈希匹配到模型底层 KV-Cache 边界
redis·缓存·哈希算法
阮胜昌1 天前
MySQL 9.7.0 LTS 现已发布:扩展了社区功能,并为企业级应用增加了动态数据脱敏功能
数据库·mysql
raindayinrain1 天前
深入理解linux内核--文件页高速缓存,页框回收,性能优化
linux·性能优化·高速缓存·页框