Comment optimiser la requête MySQL qui contient la table et la jointure gauche de SQL View
-
14-11-2019 - |
Question
J'ai cette requête:
SELECT a.id, b.discount FROM (a LEFT JOIN b ON b.id_a = a.id);
Expliquer la commande de cette requête est la suivante:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE a index NULL PRIMARY 4 NULL 1489 Using index
1 SIMPLE b ALL NULL NULL NULL NULL 819
A est la table avec 1489 rangées et B est une vue SQL.Maintenant, je comprends que MySQL doit faire 1489 * 819 opérations qui est une opération trop optimisée.Si B était une table, je créerais un index pour la colonne ID_A, mais je ne sais pas quoi faire avec SQL View.
Quelqu'un peut aider?
La solution
Je regarderais la vue et j'essaie d'aller sur les tables brutes qui qualifient l'élément que vous êtes concerné par la recherche d'existence ou non.Et assurez-vous que la table racine de la vue "B" a un index sur cette clé.
Autres conseils
Au lieu de travailler avec une vue (qui est non indexé), vous pouvez également essayer de créer une table temporaire avec des index.Nous avons fait cela pour de longues requêtes de rapport et obtenu des améliorations de vitesse impressionnantes par conséquent (YMMV bien sûr).
commutation de la table et de la vue pourrait aider.
Exemple:
SELECT a.id, b.discount FROM (b RIGHT JOIN a ON b.id_a = a.id);