mysql的哈希索引
文中执行环境为 MySql 5.7.31
InnoDB不直接支持常规的哈希索引
1 | CREATE DATABASE test; |
运行结果:
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| student | 1 | idx_name_hash | 1 | name | A | 0 | NULL | NULL | YES | BTREE |
MySQL 的 InnoDB 存储引擎不直接支持常规的哈希索引,而是使用 B+Tree 索引作为默认索引数据结构。创建索引时使用了 USING HASH,但实际上 MySQL 会将其视为默认的 B-tree 索引类型。因此,即使您使用 USING HASH,查询 SHOW INDEX 结果中的 Index_type 仍然会显示为 BTREE。
然而,InnoDB存储引擎确实引入了一种特殊的功能称为“自适应哈希索引”(Adaptive Hash Index),它用于提高热点数据的访问性能。
自适应哈希索引是一种在内存中维护的数据结构,用于加速常见的查询操作。当InnoDB发现某些数据页被频繁地访问时,它会将这些页的一部分数据构建成一个哈希索引,以便更快地定位和访问这些热点数据。这个自适应哈希索引是在内存中动态构建和维护的,可以提高一些查询的性能,特别是对于具有明显的热点数据访问模式的数据库。自适应哈希索引是一项内置的功能,无法手动指定。