Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment dire à MySQL Optimizer d'utiliser l'index sur une table dérivée ?

Il existe une solution à ce problème dans MySQL Server 5.6 - la version de prévisualisation (au moment d'écrire ces lignes).

http://dev.mysql.com /doc/refman/5.6/en/from-clause-subquery-optimization.html

Cependant, je ne sais pas si MySQL Optimizer réutilisera les index qui existent déjà lorsqu'il "ajoute des index à la table dérivée"

Considérez la requête suivante :

SELECT * FROM t1JOIN (SELECT * FROM t2) AS derive_t2 ON t1.f1=derived_t2.f1;

La documentation indique :"L'optimiseur construit un index sur la colonne f1 à partir de la dérivation_t2 si cela permet l'utilisation de l'accès aux références pour le plan d'exécution le moins coûteux."

OK, c'est super, mais est-ce que l'optimiseur réutilise les index de t2 ? En d'autres termes, que se passerait-il si un index existait pour t2.f1 ? Cet index est-il réutilisé ou l'optimiseur recrée-t-il cet index pour la table dérivée ? Qui sait ?

MODIF : La meilleure solution jusqu'à MySQL 5.6 est de créer une table temporaire, de créer un index sur cette table, puis d'exécuter la requête SELECT sur la table temporaire.