Der er en løsning på dette i MySQL Server 5.6 - preview-udgivelsen (i skrivende stund).
http://dev.mysql.com /doc/refman/5.6/da/from-clause-subquery-optimization.html
Selvom jeg ikke er sikker på, om MySQL Optimizer vil genbruge indekser, der allerede eksisterer, når den "føjer indekser til den afledte tabel"
Overvej følgende forespørgsel:
VÆLG * FRA t1JOIN (VÆLG * FRA t2) SOM derived_t2 ON t1.f1=afledt_t2.f1;
Dokumentationen siger:"Optimeringsværktøjet konstruerer et indeks over kolonne f1 fra derived_t2, hvis det ville tillade brugen af ref-adgang til den laveste omkostningsudførelsesplan."
OK, det er fantastisk, men genbruger optimizeren indekser fra t2? Med andre ord, hvad hvis der eksisterede et indeks for t2.f1? Bliver dette indeks genbrugt, eller genskaber optimeringsværktøjet dette indeks for den afledte tabel? Hvem ved?
EDIT: Den bedste løsning indtil MySQL 5.6 er at oprette en midlertidig tabel, oprette et indeks på den tabel og derefter køre SELECT-forespørgslen på den midlertidige tabel.