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

Klauzule SQL IN pomalejší než jednotlivé dotazy

Toto je známý nedostatek v MySQL.

Často platí, že pomocí UNION funguje lépe než dotaz na rozsah, jako je ten, který zobrazujete. MySQL nepoužívá indexy příliš inteligentně pro výrazy používající IN (...) . Podobná díra existuje v optimalizátoru pro booleovské výrazy s OR .

Viz http ://www.mysqlperformanceblog.com/2006/08/10/using-union-to-implement-loose-index-scan-to-mysql/ pro nějaké vysvětlení a podrobné srovnávací testy.

Optimalizátor je neustále vylepšován. Nedostatek v jedné verzi MySQL může být vylepšen v následující verzi. Vyplatí se tedy otestovat vaše dotazy na různých verzích.

Výhodné je také použít UNION ALL místo jednoduše UNION . Oba dotazy používají k ukládání výsledků dočasnou tabulku, ale rozdíl je v tom, že UNION platí DISTINCT na sadu výsledků, což způsobí další neindexované řazení.



  1. Jak počítat výskyty ve sloupci odděleném čárkou?

  2. PHP While loop zobrazuje pouze poslední řádek

  3. Migrace MySQL na PostgreSQL na AWS RDS, část 4

  4. SQL dotaz pro podmíněné načtení záznamů na základě seznamu klíčových hodnot