Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL può utilizzare gli indici quando c'è OR tra le condizioni?

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.