来源:mysql官方手册整理
自适应哈希索引
自适应哈希索引特性能够使MySQL在不牺牲事务的特性和可靠性的前提下,在具有特性的工作负载和缓存配置时表现的更像内存数据库。
可以通过启用innodb_adaptive_hash_index来开启自适应哈希索引特性或在服务器启动时通过指定--skip-innodb-adaptive-hash-index关闭。
mysql> show variables like 'innodb_adaptive_hash_index';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| innodb_adaptive_hash_index | ON |
+----------------------------+-------+
基于观察到的搜索模式,使用索引键的前缀构建哈希索引,前缀可以是任意长度,而且哈希索引可能只有b-tree的一部分值。哈希索引基于经常访问的索引页建立。
如果一张表几乎完全在内存中,哈希索引可以将键值转化为指针,通过启用对任意元素的直接查找来加快查询的效率。innodb拥有能够监控索引搜索的机制,如果发现能够通过建立哈希索引来使查询变快,它会自动建立哈希索引。
在某些工作负载下,哈希索引带来查询速度的提高远远超过监控索引查找和维护哈希索引结构的代价。在较高的工作负载下,哈希索引也可能称为一部分争用的来源,比如多个并发的连接,使用like和%通配符这样的查询也不能从哈希索引中受益,在这种情况下可以关闭该特性以减轻不必要的工作负载。因为很难精确的预