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.