Frågeplanen för OR
skiftläge verkar indikera att MySQL
använder verkligen index, så uppenbarligen ja, det kan det göra, åtminstone i det här fallet. Det verkar helt rimligt, eftersom det finns ett index på seen
och id
är PK.
Om "logiska och rimliga förklaringar" motsägs av verkligheten, då är det säkert att anta att logiken är felaktig eller att förklaringarna är felaktiga eller otillämpliga. Prestandan är notoriskt svår att förutsäga; prestandatestning är viktigt där hastighet är viktigt.
Du bör använda den som testar snabbare på indata som adekvat modellerar det som programmet kommer att se i verklig användning.
Observera dock att dina två frågor inte är semantiskt ekvivalenta:om raden med id = 5204
har också seen = 3
sedan OR
query returnerar den en gång, men UNION ALL
fråga kommer att returnera den två gånger. Det är meningslöst att välja mellan korrekt kod och felaktig kod på någon annan grund än vilken som är korrekt.