2012-02-07 72 views
2

我有一个MySQL查询,其中的年龄要检查可能的可能值数组。在MySQL和IN运算符之间有任何性能差异

查询看起来像:

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

有些时候,年龄阵也许只有一个单一的价值,说[22]。

在这种情况下,我想知道如果下面的查询(A):

select * from users where age in (22); 

会相比,(B)是最佳的:

select * from users where age = 22; 

请让我知道你的想法。

+2

比较查询计划。 – Mat 2012-02-07 14:37:18

+0

当我在我的数据库中尝试它时,查询计划看起来是相同的。 MySQL很有可能足够聪明地弄清楚它们是一样的。 – ceejayoz 2012-02-07 14:39:10

回答

5

一样多,我知道IN子句内部一系列的where子句像

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

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

+1

我不会纠正你的。事实上,我会让你高兴。 – Mchl 2012-02-07 14:40:28

+0

事实上这是事实。 – Rahul 2012-02-07 14:45:46

0

您可以使用IN子句来取代许多OR实施条件。所以

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

相同

SELECT * FROM colA IN ('Value1', 'Value2') 
1

我不相信有在MySQL IN=运营商之间的任何性能差异。

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

不管怎么说,IN条款会被内部扁平化的一系列OR条件/或运算栈的...像

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

将成为

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

不应该有对性能的影响使用

... Id in (22) 

对比

... Id=22 

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

相关问题