14.4.3 Adaptive Hash Index 自适应hash index

14.4.3 Adaptive Hash Index  自适应hash index

自适应hash index(AHI) 让InnoDB 执行更像内存数据库在系统使用合适的负载组合和足够的内存用于Buffer pool,

基于观察到的搜索模式, MySQL 创建一个hash index 使用一个index key 前缀。

索引的前缀可以任何长度, 可能只有一些值在B树索引里是出现在hash index.


Hash indexes 是基于需求对于那些index 的索引页经常被访问的


如果一个表整个在主内存里, 一个hash index 可以加速查询通过直接查找任何元素,讲索引值变成一个指针。

InnoDB 有一个机制监控索引搜索,如果InnoDB 注意到查询可以从创建的hash index收益,它会自动处理


在一些负载下, 从hash index 查询加速极大的超过了额外的工作用于监控索引查询和维护hash index结构。


有时候, read/write lock 保护访问到自适应的hash index 可以变成连接的来源在高负载下

比如 多核并发关联,查询像%通配也不会从AHI(自适应索引)收益。

mysql> show variables like '%hash%';
+-------------------------------+-------+
| Variable_name                 | Value |
+-------------------------------+-------+
| innodb_adaptive_hash_index    | ON    |

对于负载 自适应索引是不需要的, 关闭它降低不需要的性能负载。

因为它是很难预测的 是否这个功能是合适的对于特定的系统,


考虑运行基准,使用一个现实的负载。


hash index总是基于一个存在的B-tree Index 在表上,InnoDB 可以创建一个hash index 在一个key的任何长度的前缀

定义用于B-tree 取决于搜索的模式 InnoDB观察B树索引。

一个Hash index可以是部分的, 覆盖那些经常被访问的页面

原文地址:https://www.cnblogs.com/hzcya1995/p/13350145.html