sql >> Database >  >> RDS >> Mysql

Hoe vertel ik de MySQL Optimizer om de index op een afgeleide tabel te gebruiken?

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.



  1. JDBC geeft lege resultaatset terug

  2. De standaardtaal van een login wijzigen in SQL Server

  3. Waarom krijg ik deze SQLSyntaxErrorException:ORA-00933:SQL-opdracht is niet correct beëindigd wanneer ik deze JDBC-query probeer uit te voeren?

  4. Recursieve CTE voegt velden samen met ouders vanuit een willekeurig punt