17.5.3 自适应哈希索引
自适应哈希索引使得InnoDB
在具有合适的工作负载和足够内存的缓冲池系统上,能够像内存数据库一样运行,而不需要牺牲事务特性或可靠性。自适应哈希索引可以通过innodb_adaptive_hash_index
变量禁用,也可以在服务器启动时通过--innodb-adaptive-hash-index
参数启用。
根据搜索模式,哈希索引使用索引键的前缀构建。前缀可以是任意长度,并且可能只有某些B树中的值出现在哈希索引中。哈希索引在需要时对索引页面进行构建。
如果表几乎完全位于主内存中,哈希索引可以加速查询,通过直接查找任何元素,将索引值转换为一种指针。InnoDB
具有监控索引搜索的机制。如果InnoDB
注意到查询可以从构建哈希索引中受益,它将自动进行构建。
在某些工作负载中,哈希索引查找的加速效果远远超过监控索引查找和维护哈希索引结构所需的额外工作。对adaptive hash index的访问有时会在高并发工作负载下成为竞争的来源,例如多个并发连接查询。带有LIKE
操作符和%
通配符的查询也 tend 不会受益。对于不受adaptive hash index影响的工作负载,关闭它可以减少不必要的性能开销。由于难以预测adaptive hash index是否适合特定的系统和工作负载,因此考虑在启用和禁用时运行基准测试。
adaptive hash index功能是分区的。每个索引都绑定到一个特定的分区,每个分区都由一个单独的锁保护。分区控制由innodb_adaptive_hash_index_parts
变量控制。innodb_adaptive_hash_index_parts
变量默认设置为8,最大设置为512。
您可以在SHOW ENGINE INNODB STATUS
输出的SEMAPHORES
部分中监控adaptive hash index使用和竞争。如果有许多线程等待在btr0sea.c中的rw-锁,则考虑增加adaptive hash index分区数或禁用adaptive hash index。
关于哈希索引的性能特征,请参阅第10.3.9节,“B树和哈希索引比较”。