2010-08-18 4 views
0

J'ai un ensemble de grandes valeurs qui doivent être comparées dans mysql.mysql optimisation avec IN ou OR

Puis-je savoir lequel est le plus rapide? Par exemple:

Opt 1: 
SELECT * FROM table WHERE v = 1 or v = 2 or v = 3 or v = 4 or... v = 100 

Opt 2: 
SELECT * FROM table WHERE v IN (1,2,3,4,5,6,7,8,...,100) 

Puis-je savoir quelle option est plus rapide pour une grande valeur? Y a-t-il une meilleure solution? Je vous remercie.

Répondre

1

En supposant que les chiffres ne pas consécutifs, la clause IN est préférable pour deux raisons:

  1. Plus lisible
  2. optimisé pour fonctionner plus vite que les instructions OR.
+0

La liste IN est triée afin que les recherches puissent être effectuées en tant que recherche binaire. Un groupe d'OR évalue juste chaque condition un à la fois jusqu'à ce qu'un match: http://lists.mysql.com/mysql/216945 –

2

S'agit-il de nombres consécutifs? Ensuite, j'utiliserais

SELECT * FROM table WHERE v BETWEEN 1 AND 100 
+0

non, supposons qu'ils ne soient pas consécutifs. – davidlee

+0

@benmsia Votre exemple vient de suggérer qu'ils sont consécutifs, et dans ce cas, un entre est beaucoup plus rapide qu'une énumération de 100 nombres, car le moteur doit simplement faire une vérification de plage au lieu de 100 comparaisons. S'il y a des lacunes, voyez la réponse de OMG Ponies. – Frank

0

Lorsque j'étudiais des bases de données, mon tuteur m'a dit qu'ils se résument à la même chose.

+0

Logiquement, oui ils sont équivalents. Mais les optimiseurs fonctionnent généralement mieux avec IN vs OR. –

+0

Bon point. Je suppose que je ne parlais pas spécifiquement de la vitesse à ce moment-là. –