Le plan de requête pour le OR
la casse apparaît pour indiquer que MySQL
utilise en effet des index, donc évidemment oui, il peut le faire, du moins dans ce cas. Cela semble tout à fait raisonnable, car il existe un index sur seen
, et id
est le PK.
Si les "explications logiques et raisonnables" sont contredites par la réalité, alors il est prudent de supposer que la logique est erronée ou que les explications sont erronées ou inapplicables. Les performances sont notoirement difficiles à prévoir; les tests de performance sont essentiels là où la vitesse est importante.
Vous devriez utiliser celui qui teste plus rapide sur une entrée qui modélise de manière adéquate ce que le programme verra en utilisation réelle.
Notez également, cependant, que vos deux requêtes ne sont pas sémantiquement équivalentes :si la ligne avec id = 5204
a aussi seen = 3
puis le OR
la requête le renverra une fois, mais le UNION ALL
la requête le renverra deux fois. Il est inutile de choisir entre le code correct et le code incorrect sur une autre base que celle qui est correcte.