youyichannel

志于道,据于德,依于仁,游于艺!

0%

MySQL AHI

AHI: 自适应哈希索引

哈希是一种非常快的查找方法,通常情况下时间复杂度为 O(1),即需要一次查找就能

定位数据;B+ 树的查找次数取决于 B+ 树的高度,在生产环境中,B+ 树的高度一般

3~4 层,故需要 3~4 次的查询。

InnoDB 存储引擎会监控对表上各索引页的查询。如果观察到建立哈希索引可以带来速度提升,则建立哈希索引,即自适应哈希索引。

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

创建 AHI 的条件

为页建立AHI要求,对这个页的连续访问模式(查询的条件)必须是一样的,需要以该模式访问了 100 次,页通过该模式访问了 N 次,其中 N=页中记录 / 16

注意:交替使用 where a = xxxwhere a = xxx and b = xxx,将不会为该页建立AHI

AHI 优缺点

优点

  1. 无序;
  2. 降低对二级索引树的频繁访问,查询消耗 O(1)
  3. 自适应,不用人为创建。

缺点

  1. 自适应哈希索引会占用 innodb buffer pool
  2. 自适应哈希索引只适合搜索等值的查询,而对于其他查找类型,如范围查找、模糊查找,是不可以使用的;
  3. 自适应哈希索引无法对 Order By 进行优化。

官方文档:[17.5.3 Adaptive Hash Index](