Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Was ist schneller:korrelierte Unterabfragen oder Join?

Erstens ist eine korrelierte Unterabfrage wirklich eine Art Join. Es gibt keine goldene Regel darüber, was den besten Ausführungsplan ergibt. Wenn Sie an Leistung interessiert sind, müssen Sie die verschiedenen Formen ausprobieren, um zu sehen, was am besten funktioniert. Oder sehen Sie sich zumindest die Ausführungspläne an, um diese Entscheidung zu treffen.

Im Allgemeinen vermeide ich korrelierte Unterabfragen aus mehreren Gründen. Erstens können sie fast immer ohne die Korrelation geschrieben werden. Zweitens wandeln viele Abfrage-Engines sie in Nested-Loop-Joins um (allerdings unter Verwendung von Indizes), und andere Join-Strategien könnten besser sein. In solchen Fällen erschweren korrelierte Unterabfragen die Parallelisierung der Abfrage. Drittens befinden sich korrelierte Unterabfragen normalerweise entweder in den SELECT- oder WHERE-Klauseln. Ich mag es, wenn alle meine Tabellen in der FROM-Klausel stehen.

In MySQL sind korrelierte Unterabfragen jedoch oft die meisten effiziente Möglichkeit, eine Abfrage durchzuführen. Dies gilt insbesondere, wenn eine Unterabfrage in einem IN verwendet wird Klausel. Es gibt also keine goldene Regel.