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

Hvordan fortæller jeg MySQL Optimizer at bruge indekset på en afledt tabel?

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.



  1. opdage mysql-fejl uden at udføre det

  2. Hvordan sender jeg en liste som en parameter i en lagret procedure?

  3. MySQL datetime-felter og sommertid -- hvordan refererer jeg til den ekstra time?

  4. Hvad er SQLite?