MySQL - 同一列的 BTree AND Hash 索引

MySQL - BTree AND Hash indexes for the same column

我曾尝试寻找类似的问题,但除了关于同一列的两个索引的问题(一般而言)外,没有找到任何其他问题。

让我们假设我们有一个 table 列 COL。 table(以及整个数据库)对于客户端是只读的(让我们假设它每隔很长一段时间更新一次 once/once,并且仅由后端服务更新)。因此,insertion/update时间无关紧要。

对于此列,有一些使用率较高的查询会搜索 COL 值在某个范围内的行,还有一些使用率较高的查询会搜索直接比较 COL 的行有一个值(相等性检查)。

根据上述情况,在 COL 上同时持有 BTREEHASH 索引是否有益?优化器是否会对范围查询使用 BTREE 索引,对直接比较查询使用 HASH 索引? 如果 COL 是类型 varchar(256),答案会改变吗?

谢谢!

我会坚持使用 B-Tree 索引,因为无论如何您都需要它。使用哈希索引也可能会带来一些小的性能提升,但您也会占用更多内存。

更重要的是,哈希索引不适用于最常见的存储引擎(InnoDB 和 MyISAM)-- Table documentation 中的 13.1。