Wählen Sie… WO FOO_ID IN (Wählen Sie ID aus…) Effizienz [geschlossen
-
27-10-2019 - |
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?
Lösung
Sie können diesen kurzen Artikel überprüfen:http://www.mysqlperformanceblog.com/2010/10/25/mysql-limitations-t-3-subqueries/
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.