我有一个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;
请让我知道你的想法。
答案 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')