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

Come posso dire a MySQL Optimizer di utilizzare l'indice su una tabella derivata?

C'è una soluzione a questo in MySQL Server 5.6:la versione di anteprima (al momento in cui scrivo).

http://dev.mysql.com /doc/refman/5.6/en/from-clause-subquery-optimization.html

Anche se non sono sicuro che MySQL Optimizer riutilizzerà gli indici già esistenti quando "aggiunge indici alla tabella derivata"

Considera la seguente query:

SELEZIONA * DA t1JOIN (SELEZIONA * DA t2) COME derivato_t2 SU t1.f1=derivato_t2.f1;

La documentazione dice:"L'ottimizzatore costruisce un indice sulla colonna f1 da derivato_t2 se ciò consente l'uso dell'accesso ref per il piano di esecuzione con il costo più basso."

OK, è fantastico, ma l'ottimizzatore riutilizza gli indici di t2? In altre parole, cosa succederebbe se esistesse un indice per t2.f1? Questo indice viene riutilizzato o l'ottimizzatore ricrea questo indice per la tabella derivata? Chi lo sa?

MODIFICA: La soluzione migliore fino a MySQL 5.6 è creare una tabella temporanea, creare un indice su quella tabella e quindi eseguire la query SELECT sulla tabella temporanea.