Il piano di query per OR
case sembra indicare che MySQL
sta effettivamente usando gli indici, quindi evidentemente sì, può farlo, almeno in questo caso. Sembra del tutto ragionevole, perché c'è un indice su seen
e id
è il PK.
Se le "spiegazioni logiche e ragionevoli" sono contraddette dalla realtà, allora è lecito ritenere che la logica sia imperfetta o che le spiegazioni siano sbagliate o inapplicabili. Le prestazioni sono notoriamente difficili da prevedere; il test delle prestazioni è essenziale laddove la velocità è importante.
Dovresti usare quello che verifica più veloce in input che modella adeguatamente ciò che il programma vedrà nell'uso reale.
Nota anche, tuttavia, che le tue due query non sono semanticamente equivalenti:se la riga con id = 5204
ha anche seen = 3
quindi il OR
query lo restituirà una volta, ma il UNION ALL
query lo restituirà due volte. È inutile scegliere tra codice corretto e codice errato su una base diversa da quella corretta.