Question

i) Entre ces deux dont l'un est plus efficace:

Select A.* from A, B where A.b_id = B.id

ou

Select A.* from A where A.b_id in (select id from B);

ii) Comment Select A.* from A where A.b_id in (select id from B); fonctionne vraiment? Est-il traduit en interne dans quelque chose comme Select A.* from A, B where A.b_id = B.id ou est (select id from B) évaluée pour chaque ligne de A?

Était-ce utile?

Autres conseils

Celui-ci est plus efficace:

Select A.* from A, B where A.b_id = B.id

Oui, fonctionne Select A.* from A where A.b_id in (select id from B).

Et, non, (select id from B) n'est pas évaluée pour chaque ligne. Il est évalué qu'une seule fois.

Normalement, REJOINT sont plus rapides que d'utiliser l'opérateur IN.

Je ne sais pas où ce genre de faux-jointures viennent, mais vous devez joindre des tables en utilisant ON, pas une masse de où est à la fin.

SELECT A.*
FROM A
INNER JOIN B ON (A.b_id = B.id)

Cela dépend de divers facteurs, y compris la version MySQL, la taille des tables, l'existence d'un index, etc.

Vous devriez essayer d'exécuter EXPLAIN ..., ou encore mieux si pris en charge, EXPLAIN EXTENDED ... suivie SHOW WARNIGS; pour essayer de comprendre ce que MySQL est en train de faire.

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