Comment optimiser la requête MySQL qui contient la table et la jointure gauche de SQL View

StackOverflow https://stackoverflow.com/questions/5004576

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?

Était-ce utile?

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);

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top