InnoDB存储引擎AHI

简介

哈希算法是一种非常快的查找方法,在一般情况(没有发生hash冲突)下这种查找的时间复杂度为O(1)。

innoDB存储引擎会监控对表上辅助索引页的查询。如果观察到建立hash索引可以提升性能,就会在缓冲池建立hash索引,称之为自适应哈希索引(Adaptive Hash Index,AHI)

AHI工作流程

image

AHI是通过缓冲池的B+ Tree构造而来,使用索引键的前缀来构建哈希索引,前缀可以是任意长度。因此构建速度很快,而且不需要对整张表构建hash索引。InnoDB存储引擎会自动根据访问的频率模式来自动地为某些热点页建立hash索引。

访问频率和模式

假设在某张表的两个字段建立索引(a, b);其访问模式通常有一下两种:

  • WHERE a= XXX;
  • WHERE a=XXX and b=XXX;

访问模式指的是查询条件要一样,若交替进行上述两种查询,InnoDB是不会对该页构造AHI。此外AHI还有如下要求:

  • 以该模式访问100次;
  • 页通过该模式被访问了N(N=页中的记录数/16)次;

根据InnoDB官方文档说明,启用了AHI后,读写的速度会提升2倍,辅助索引的连接操作性能可以提高5倍。

可以通过show engine innodb status;查看AHI的工作状态:

image

  • Hash table size:代表AHI的大小;
  • hash searches/s:代表命中hash查询的频率;
  • non-hash searches/s:代表没有命中hash查询的频率;

需要注意的是,hash查询之前是等值查询,例如模糊查询、范围查找,是不能使用hash索引的。用户可以根据实际场景去权衡是否要开启AHI(通过innodb_adaptive_hash_index配置开关),哈希索引查找的加速监视索引查找和维护哈希索引结构的额外工作使用哪种方式收益更大。

你可能感兴趣的:(InnoDB存储引擎AHI)