sql >> Base de Datos >  >> RDS >> Mysql

¿Puede MySQL usar índices cuando hay O entre condiciones?

El plan de consulta para OR caso parece indicar que MySQL de hecho, está usando índices, por lo que evidentemente sí, puede hacerlo, al menos en este caso. Eso parece completamente razonable, porque hay un índice en seen y id es el PK.

Si las "explicaciones lógicas y razonables" se contradicen con la realidad, entonces es seguro asumir que la lógica es defectuosa o que las explicaciones son incorrectas o inaplicables. El rendimiento es notoriamente difícil de predecir; las pruebas de rendimiento son esenciales cuando la velocidad es importante.

Deberías usar el que prueba más rápido en la entrada que modela adecuadamente lo que el programa verá en uso real.

Tenga en cuenta también, sin embargo, que sus dos consultas no son semánticamente equivalentes:si la fila con id = 5204 también tiene seen = 3 entonces el OR la consulta lo devolverá una vez, pero UNION ALL query lo devolverá dos veces. No tiene sentido elegir entre el código correcto y el código incorrecto sobre cualquier otra base que no sea cuál es el correcto.