Frage

i) zwischen diesen beiden, die eine effizienter ist:

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

oder

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

ii) Wie geht es? Select A.* from A where A.b_id in (select id from B); Wirklich arbeiten? Ist es intern in so etwas übersetzt Select A.* from A, B where A.b_id = B.id oder ist (select id from B) für jede Zeile von a bewertet?

War es hilfreich?

Lösung

Andere Tipps

Dieser ist effizienter:

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

Ja, Select A.* from A where A.b_id in (select id from B) Arbeiten.

Und nein, (select id from B) wird für jede Zeile nicht bewertet. Es wird nur einmal bewertet.

Normalerweise sind die Verbindungen schneller als die Verwendung der IN Operator.

Ich bin mir nicht sicher, woher diese Arten von Fälschungen kommen, aber Sie sollten sich Tischen anschließen ON, keine Masse von wo am Ende ist.

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

Es hängt von verschiedenen Faktoren ab, einschließlich der MySQL -Version, der Größe der Tabellen, der Existenz von Indizes usw.

Sie sollten versuchen, auszuführen EXPLAIN ..., oder sogar noch besser, wenn sie unterstützt werden, EXPLAIN EXTENDED ... gefolgt von SHOW WARNIGS; zu versuchen zu verstehen, was MySQL tut.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top