MySQL中的IN和=运算符之间是否存在性能差异?

时间:2012-02-07 14:33:50

标签: mysql

我有一个MySQL查询,在这个年龄段要检查一系列可能的值。

查询如下:

select * from users where age in (15,18,20,22);

有些时候,age-array可能只有一个值,比如[22]。

在这种情况下,我想知道以下查询(A):

select * from users where age in (22);
与(B)相比,

是最佳的:

select * from users where age = 22;

请让我知道你的想法。

4 个答案:

答案 0 :(得分:6)

尽管我知道IN子句在内部实现为一系列where子句,如

WHERE id = 1 OR id = 2 OR id = 3

如果我错了,请纠正我......

答案 1 :(得分:1)

我不相信MySQL中的IN=运算符之间存在任何性能差异。

我们在尝试比较单个元素时使用=运算符,并且当我们必须比较使用IN子句的元素列表时。

无论如何,IN子句在内部变得扁平,因为OR条件/ OR'堆栈系列......如

col1 IN('a','b','c')

将成为

col = 'a' OR col1 = 'b' OR col = 'c'

答案 2 :(得分:1)

使用

不会对性能产生影响
... Id in (22)

Vs的

... Id=22

两个语句的执行计划是相同的,当IN中的列表只有一个元素时,IN语句将转换为'= 22'。

答案 3 :(得分:0)

您可以使用IN子句替换许多OR条件。所以

SELECT * FROM colA = 'Value1' or colA = 'Value2'

相同
SELECT * FROM colA IN ('Value1', 'Value2')