Plan zapytań dla OR wielkość liter wskazuje, że MySQL rzeczywiście używa indeksów, więc ewidentnie tak, może to zrobić, przynajmniej w tym przypadku. Wydaje się to całkiem rozsądne, ponieważ istnieje indeks seen i id jest PK.
Jeśli „logiczne i rozsądne wyjaśnienia” są sprzeczne z rzeczywistością, można bezpiecznie założyć, że logika jest błędna lub wyjaśnienia są błędne lub nie mają zastosowania. Wydajność jest bardzo trudna do przewidzenia; testowanie wydajności jest niezbędne tam, gdzie ważna jest szybkość.
Powinieneś użyć tego, który testuje szybciej na danych wejściowych, które odpowiednio modelują to, co program zobaczy w rzeczywistym użyciu.
Pamiętaj jednak, że Twoje dwa zapytania nie są semantycznie równoważne:jeśli wiersz z id = 5204 również seen = 3 następnie OR zapytanie zwróci je raz, ale UNION ALL zapytanie zwróci go dwukrotnie. Nie ma sensu wybierać między poprawnym kodem a nieprawidłowym kodem na jakiejkolwiek podstawie innej niż ta, która jest poprawna.