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.