2010-11-26 16 views
6

私はIN()ステートメントを使用するクエリでMySQLに問題があり、インデックスを使用できないことがあることを読んでいます。サブクエリを使用しないと本当にそうですか?MySQLクエリの最適化:IN()vs OR

どのアプローチが良いですか?パフォーマンスの違いはありますか?

SELECT * 
FORM `somewhere` 
WHERE 
    `id` = 3 
    OR `id` = 5 
    OR `id` = 15 
    OR `id` = 56 
    OR `id` = 34 
    OR `id` = 47 
SELECT * 
FORM `somewhere` 
WHERE 
    `id` IN (3,5,15,56,34,47) 
+0

をお読みください。私はMySQLがIN()を解析するときに内部からORに変換します。 – martynthewolf

答えて

9

第2のアプローチは優れています。 MySQLはこれを最適化できます。

MySQLには、IN()文を使用するクエリに問題があります。インデックスは使用できないことがあります。サブクエリを使用しないと本当にそうですか?

IN(SELECT ...)と書くとINに問題があるかもしれませんが、値の単純なリストに問題はないと思います。