【发布时间】:2021-03-20 09:59:27
【问题描述】:
我有一个非常简单的查询
SELECT col1, col2, col3, col4 FROM table FORCE INDEX (col2)
WHERE col2 IN ('there', 'are, 'around', 'six', 'values', 'here')
索引 col2 用于 col2。我的table 有大约 1000 万行。我在这里使用了FORCE INDEX,因为我的表中有其他索引,而MySQL 使用其他索引之一而不是索引col2。此查询的另一个索引非常慢。
我的表中所有索引的列表:
INDEX col2 (col2)
UNIQUE INDEX ind1 (col1, col2)
INDEX ind2 (col1, col2)
INDEX ind3 (col2, col1)
此查询(使用FORCE INDEX)并不慢(在 AWS RDS 免费套餐上需要 6 秒),但需要使其尽可能快。我还能做些什么来加快这个查询的速度吗?
【问题讨论】:
-
除非查询优化器出错,否则不应强制索引。有时使用索引会比较慢。
-
编辑了帖子
-
查询很简单。 MySQL 应该能够找出正确的索引。其他索引是什么,架构是什么,真正的查询是什么?
-
我可以想象常量和表中的默认排序规则不同,阻止使用
col2上的索引。 -
编辑了帖子