Mysql
 sql >> Database >  >> RDS >> Mysql

Clausola SQL IN più lenta delle singole query

Questa è una carenza nota in MySQL.

È spesso vero che usando UNION funziona meglio di una query di intervallo come quella mostrata. MySQL non utilizza gli indici in modo molto intelligente per le espressioni che utilizzano IN (...) . Esiste un buco simile nell'ottimizzatore per le espressioni booleane con OR .

Vedi http ://www.mysqlperformanceblog.com/2006/08/10/using-union-to-implement-loose-index-scan-to-mysql/ per alcune spiegazioni e benchmark dettagliati.

L'ottimizzatore viene continuamente migliorato. Una carenza in una versione di MySQL può essere migliorata in una versione successiva. Quindi vale la pena testare le tue query su versioni diverse.

È anche vantaggioso utilizzare UNION ALL invece di semplicemente UNION . Entrambe le query utilizzano una tabella temporanea per memorizzare i risultati, ma la differenza è che UNION applica DISTINCT al set di risultati, che comporta un ulteriore ordinamento non indicizzato.