Dette er en kendt mangel i MySQL.
Det er ofte rigtigt at bruge UNION yder bedre end en intervalforespørgsel som den, du viser. MySQL anvender ikke indekser særlig intelligent til udtryk, der bruger IN (...) . Et lignende hul findes i optimeringsværktøjet til booleske udtryk med OR .
Se http ://www.mysqlperformanceblog.com/2006/08/10/using-union-to-implement-loose-index-scan-to-mysql/ for nogle forklaringer og detaljerede benchmarks.
Optimizeren bliver hele tiden forbedret. En mangel i én version af MySQL kan blive forbedret i en efterfølgende version. Så det er værd at teste dine forespørgsler på forskellige versioner.
Det er også fordelagtigt at bruge UNION ALL i stedet for blot UNION . Begge forespørgsler bruger en midlertidig tabel til at gemme resultater, men forskellen er, at UNION anvender DISTINCT til resultatsættet, hvilket medfører en ekstra ikke-indekseret sortering.