我有一个查询,该查询的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))
提供值列表时是否可以使用索引?
答案 0 :(得分:0)
通常一个人不会JOIN x ON c = constant
。 ON
子句应指定此表与其他表的关系。 WHERE
子句应提供过滤功能,例如col1=1 and col2=2
。
“行构造函数”很早就存在,但是直到最近(5.7.3)才对它们进行最少的优化。您正在运行什么版本?即使使用最新版本,我也希望col1=1 and col2 in (2,3,4)
至少与行构造器方法一样得到优化。
OR
通常会阻止任何优化。也许它从来没有比其他方法快。
我们需要查看整个查询EXPLAIN
和SHOW CREATE TABLE
;阴影中可能还有其他问题。