O plano de consulta para o
OR
maiúsculas e minúsculas parecem indicar que MySQL
está de fato usando índices, então evidentemente sim, pode fazer, pelo menos neste caso. Isso parece totalmente razoável, porque há um índice em seen
e id
é o PK. Se "explicações lógicas e razoáveis" são contrariadas pela realidade, então é seguro assumir que a lógica é falha ou que as explicações estão erradas ou inaplicáveis. O desempenho é notoriamente difícil de prever; o teste de desempenho é essencial onde a velocidade é importante.
Você deve usar aquele que testa mais rápido na entrada que modela adequadamente o que o programa verá em uso real.
Observe também, no entanto, que suas duas consultas não são semanticamente equivalentes:se a linha com
id = 5204
também tem seen = 3
então o OR
a consulta retornará uma vez, mas o UNION ALL
query irá devolvê-lo duas vezes. É inútil escolher entre o código correto e o código incorreto em qualquer base que não seja qual é o correto.