文档主页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  自适应哈希索引

17.5.3 自适应哈希索引

自适应哈希索引使 InnoDB 能够在具有适当工作负载和足够缓冲池内存的系统上,表现得更像一个内存数据库,而不会牺牲事务功能或可靠性。自适应哈希索引通过 innodb_adaptive_hash_index 变量禁用,或在服务器启动时通过 --innodb-adaptive-hash-index 启用。

根据观察到的搜索模式,使用索引键的前缀构建哈希索引。前缀可以是任何长度,并且可能只有 B 树中的某些值出现在哈希索引中。对经常访问的索引页构建哈希索引。

如果表几乎完全适合主内存,哈希索引通过允许直接查找任何元素来加速查询,将索引值变成一种指针。 InnoDB 具有一个监控索引搜索的机制。如果 InnoDB 发现查询可以从构建哈希索引中获益,它会自动构建索引。

对于某些工作负载,哈希索引查找带来的加速远远超过了监控索引查找和维护哈希索引结构的额外工作。在高负载工作负载下,例如多个并发连接,访问自适应哈希索引有时会成为争用来源。带有 LIKE 运算符和 % 通配符的查询往往也无法从中获益。对于无法从自适应哈希索引中获益的工作负载,将其关闭可以减少不必要的性能开销。由于很难预先预测自适应哈希索引是否适合特定系统和工作负载,因此考虑在启用和禁用它的情况下运行基准测试。

自适应哈希索引功能被分区。每个索引绑定到一个特定的分区,每个分区由一个独立的闩锁保护。分区由 innodb_adaptive_hash_index_parts 变量控制。 innodb_adaptive_hash_index_parts 变量默认设置为 8。最大设置值为 512。

您可以在 SHOW ENGINE INNODB STATUS 输出的 SEMAPHORES 部分监控自适应哈希索引的使用和争用。如果有很多线程在 btr0sea.c 中创建的 rw-闩锁上等待,请考虑增加自适应哈希索引分区的数量或禁用自适应哈希索引。

有关哈希索引性能特性的信息,请参阅 第 10.3.9 节,“B 树索引和哈希索引的比较”.