Er is een oplossing hiervoor in MySQL Server 5.6 - de preview-release (op het moment van schrijven).
http://dev.mysql.com /doc/refman/5.6/en/from-clause-subquery-optimization.html
Hoewel ik niet zeker weet of de MySQL Optimizer indexen zal hergebruiken die al bestaan wanneer het "indexen toevoegt aan de afgeleide tabel"
Beschouw de volgende vraag:
SELECT * FROM t1JOIN (SELECT * FROM t2) AS afgeleid_t2 ON t1.f1=afgeleide_t2.f1;
De documentatie zegt:"De optimizer construeert een index over kolom f1 van afgeleid_t2 als dit het gebruik van ref-toegang zou toestaan voor het uitvoeringsplan met de laagste kosten."
OK, dat is geweldig, maar hergebruikt de optimizer indexen van t2? Met andere woorden, wat als er een index bestond voor t2.f1? Wordt deze index opnieuw gebruikt of maakt de optimizer deze index opnieuw voor de afgeleide tabel? Wie weet?
BEWERKEN: De beste oplossing tot MySQL 5.6 is om een tijdelijke tabel te maken, een index op die tabel te maken en vervolgens de SELECT-query op de tijdelijke tabel uit te voeren.