Plán dotazů pro OR
případ ukazuje, že MySQL
skutečně používá indexy, takže evidentně ano, může, alespoň v tomto případě. To se zdá být zcela rozumné, protože na seen
existuje index a id
je PK.
Pokud jsou "logická a rozumná vysvětlení" v rozporu s realitou, pak lze s jistotou předpokládat, že logika je chybná nebo vysvětlení jsou špatná či nepoužitelná. Výkon je notoricky obtížné předvídat; testování výkonu je zásadní tam, kde je důležitá rychlost.
Měli byste použít ten, který testuje rychlejší na vstupu, který adekvátně modeluje to, co program uvidí v reálném použití.
Upozorňujeme však také, že vaše dva dotazy nejsou sémanticky ekvivalentní:pokud řádek s id = 5204
má také seen = 3
potom OR
dotaz to vrátí jednou, ale UNION ALL
dotaz to vrátí dvakrát. Je zbytečné volit mezi správným a nesprávným kódem na jakémkoli jiném základě, než který je správný.