文章目录
1、简述
哈希(hash)查找非常快,一般情况下时间复杂度为 O(1),一般仅需要一次查找就能定位。而 B+ 树的查找次数,取决于 B+ 树的高度,B+ 树的高度一般为 34层,因此便需要查询34次。
InnoDB 存储引擎通过观察表上索引页的查询,如果发现建立哈希索引可以提升查询效率,则会自动建立哈希索引,称之为自适应哈希索引(Adaptive Hash Index)。
AHI 是基于缓冲池的B+树构造的索引,因此速度非常快,而且不需要对整张表建立索引。InnoDB 存储引擎会自动根据访问的频率和模式来自动为某些热点页建立哈希索引。
考虑到不同系统的差异,有些系统开启自适应哈希索引可能会导致性能提升不明显,而且为监控索引页查询次数增加了多余的性能损耗, MySQL5.7 更改了 AHI 实现机制,每个 AHI 都分配了特定分区,每个索引都绑定到特定分区,并且每个分区均受单独的锁存器保护。分区由 innodb_adaptive_hash_index_parts 变量控制。默认情况下,innodb_adaptive_hash_index_parts 变量值为8,最大值为 512。
自适应哈希索引功能由 innodb_adaptive_hash_index 变量启用,或者在服务器启动时由–skip-innodb-adaptive-hash-index关闭。
mysql> show variables like "innodb_adaptive_hash_index";
+----------------------------+-------+
| Variable