2010-11-26 27 views
6

He estado leyendo, que MySQL tiene un problema con las consultas que utilizan la instrucción IN() - a veces los índices no se pueden utilizar. ¿Eso es realmente así, si no uso una subconsulta?optimización de consultas MySQL: IN() vs O

¿Qué enfoque es mejor? ¿Hay una diferencia de rendimiento?

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

Creo que estos son muy similares en términos de rendimiento. Por lo que entiendo cuando MySQL analiza el IN() lo traduce en ORs internamente ... – martynthewolf

Respuesta

9

El segundo enfoque es mejor. MySQL puede optimizar esto.

MySQL tiene un problema con las consultas que usan la instrucción IN() - a veces los índices no se pueden utilizar. ¿Eso es realmente así, si no uso una subconsulta?

Puede haber un problema con IN cuando escribe IN(SELECT ...), pero no creo que haya un problema con una simple lista de valores.