2012-02-07 10 views
2

可能性のある値の配列に対して年齢をチェックするMySQLクエリがあります。MySQLのIN演算子と=演算子の間にパフォーマンスの違いはありますか?

クエリは次のようになります。

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

いくつかの時間を、年齢アレイしか言い、単一の値を持っているかもしれない[22]。このような状況で

は、次のクエリ(A)場合は疑問に思って:(B)と比較して

select * from users where age in (22); 

が最適になります。

select * from users where age = 22; 

、私は自分の考えをお聞かせください。

+2

クエリプランを比較します。 – Mat

+0

私のDB上で試してみると、クエリプランは同じように見えます。 MySQLはそれらが同じであることを理解するのに十分なほどスマートです。 – ceejayoz

答えて

5

同じくらい私はあなたが多くのORを交換するIN句を使用することができます

+1

私はあなたを訂正しません。私は実際にあなたをupvoteします。 – Mchl

+0

それは本物の火です。 – Rahul

0

... IN句が内部的に私が間違っている場合

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

のような句が私を修正してくださいどこのシリーズとして実装されている知っています条件。だから、

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

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

私はMySQLでIN=事業者との間のパフォーマンスの差があるとは考えていないと同じです。

私たちは=オペレータを使用して、単一の要素を比較しようとしているときと、使用する要素のリストを比較するときにIN節を使用します。

とにかく、IN句は内部

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

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

が上のパフォーマンスへの影響があってはならないとなりますように... OR条件/ OR演算スタックのシリーズとして平らになります使用例:

... Id in (22) 

Vs

... Id=22 

INステートメントは、INのリストに1つの要素しかない場合、 '= 22'に変換されます。