除了有关同一列的两个索引的问题外,我试图找到类似的问题,但没有找到任何问题。
让我们假设我们有一个包含列COL
的表。该表(以及整个数据库)对于客户端是只读的(让我们假设它每隔很长的时间便一次/一次且仅由后端服务进行更新)。因此,插入/更新时间无关紧要。
在此列中,有一些使用率很高的查询来搜索COL
值在某个范围内的行,而一些使用率更高的查询会搜索其中COL
与一个值直接比较的行。值(相等性检查)。
鉴于以上所述,在BTREE
上同时保留HASH
和COL
索引是否有益?优化程序是否将BTREE
索引用于范围查询,并将HASH
索引用于直接比较查询?
如果COL
的类型为varchar(256)
,答案会改变吗?
谢谢!
答案 0 :(得分:2)
我会坚持使用B树索引,因为无论如何您都需要它。使用散列索引也可能会获得一些小的性能提升,但是您还将占用更多的内存。
更重要的是,哈希索引不适用于最常见的存储引擎(InnoDB和MyISAM)-documentation中的表13.1。