sql >> Databáze >  >> RDS >> Mysql

Může MySQL používat indexy, když mezi podmínkami existuje NEBO?

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ý.



  1. Vzory šablon a modifikátory pro číselné formátování v PostgreSQL

  2. vstupní soubor vypadá jako výpis textového formátu. Použijte prosím psql

  3. SQL DELETE s JOIN další tabulkou pro podmínku WHERE

  4. Jak zjistit počet dní mezi dvěma daty v MySQL