Rozwiązaniem tego problemu jest MySQL Server 5.6 — wersja zapoznawcza (w momencie pisania tego tekstu).
http://dev.mysql.com /doc/refman/5.6/en/from-clause-subquery-optimization.html
Chociaż nie jestem pewien, czy Optymalizator MySQL ponownie użyje już istniejących indeksów, gdy „doda indeksy do tabeli pochodnej”
Rozważ następujące zapytanie:
SELECT * FROM t1JOIN (SELECT * FROM t2) AS pochodny_t2 ON t1.f1=derived_t2.f1;
Dokumentacja mówi:„Optymalizator konstruuje indeks nad kolumną f1 z pochodną_t2, jeśli pozwoliłoby to na użycie dostępu do referencji dla planu wykonania o najniższych kosztach”.
OK, to świetnie, ale czy optymalizator ponownie wykorzystuje indeksy z t2? Innymi słowy, co by było, gdyby istniał indeks dla t2.f1? Czy ten indeks jest ponownie używany, czy też optymalizator odtwarza ten indeks dla tabeli pochodnej? Kto wie?
EDYTUJ: Najlepszym rozwiązaniem do MySQL 5.6 jest utworzenie tabeli tymczasowej, utworzenie indeksu dla tej tabeli, a następnie uruchomienie zapytania SELECT w tabeli tymczasowej.