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