如何在值列表上使用索引?

时间:2019-05-25 09:55:49

标签: mysql join indexing

我有一个查询,该查询的mytable唯一索引为(col1,col2)

explain
...
join mytable on col1=1 and col2=2

使用type: eq_ref

显示索引的正确使用

但是使用列表时不再使用索引

join mytable on col1=1 and col2 in (2,3,4)

Extra: Range checked for each record (index map: 0x1);

这给出了相同的结果:

join mytable on (col1,col2) in ((1,2),(1,3),(1,4))

提供值列表时是否可以使用索引?

1 个答案:

答案 0 :(得分:0)

  • 通常一个人不会JOIN x ON c = constantON子句应指定此表与其他表的关系。 WHERE子句应提供过滤功能,例如col1=1 and col2=2

  • “行构造函数”很早就存在,但是直到最近(5.7.3)才对它们进行最少的优化。您正在运行什么版本?即使使用最新版本,我也希望col1=1 and col2 in (2,3,4)至少与行构造器方法一样得到优化。

  • OR通常会阻止任何优化。也许它从来没有比其他方法快。

  • 我们需要查看整个查询EXPLAINSHOW CREATE TABLE;阴影中可能还有其他问题。