2010-11-26 5 views
6

J'ai lu, que MySQL a un problème avec les requêtes qui utilisent l'instruction IN() - parfois les index ne peuvent pas être utilisés. Est-ce vraiment le cas, si je n'utilise pas de sous-requête?Optimisation de requête MySQL: IN() vs OR

Quelle approche est la meilleure? Y a-t-il une différence de performance?

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

Je pense que ceux-ci sont très similaires en termes de performance. De ce que je comprends quand MySQL analyse l'IN() il le traduit en ORs en interne ... – martynthewolf

Répondre

9

La deuxième approche est meilleure. MySQL peut optimiser cela.

MySQL a un problème avec les requêtes qui utilisent de l'instruction IN() - parfois des indices ne peuvent pas être utilisés. Est-ce vraiment le cas, si je n'utilise pas de sous-requête?

Il peut y avoir un problème avec quand vous écrivez IN(SELECT ...), mais je ne pense pas qu'il y ait un problème avec une simple liste de valeurs.