innerer Join und where in () -Klausel-Performance?

8

Ich kann dasselbe Ergebnis für diese Abfragen erhalten, aber welches ist das schnellste und effizienteste?

wo in () oder innerer Join?

%Vor%

und

%Vor%     
ocanal 11.03.2011, 15:11
quelle

3 Antworten

12

Hängt von Ihrer SQL-Engine ab. Neuere SQL-Systeme, die vernünftige Abfrageoptimierer haben, schreiben höchstwahrscheinlich beide Abfragen in den gleichen Plan um. In der Regel wird eine Unterabfrage (Ihre zweite Abfrage) mithilfe eines Joins (der ersten Abfrage) neu geschrieben.

In einfachen SQL-Engines, die keine großen Abfrageoptimierer haben, sollte der Join schneller sein, da sie Unterabfragen in eine temporäre In-Memory-Tabelle ausführen können, bevor sie die äußere Abfrage ausführen.

In einigen SQL-Engines mit begrenztem Speicherbedarf ist die Unterabfrage jedoch möglicherweise schneller, da kein Join erforderlich ist. Dadurch werden mehr Daten erzeugt.

Also, zusammenfassend, es kommt darauf an.

    
Stephen Chung 11.03.2011, 15:15
quelle
3


        Um die Performance zu überprüfen, führen Sie beide Abfragen mit EXPLAIN SELECT .... aus. AFAIK, INNER JOIN ist schneller als IN
Was ist Ihre Art von Tabellen-Engine MYISAM oder INNODB

    
diEcho 11.03.2011 15:16
quelle
-2

gibt es auch eine andere Option, EXISTS. Ich bin ein Tsql-Typ, also ....

%Vor%

Ich denke EXISTS ist in den meisten Engines verfügbar. Es ist im Allgemeinen ziemlich schnell.

IN sql server mindestens (2005+) gibt es überhaupt keine Leistungsdifferenz zwischen IN und EXISTS für Fälle, in denen die fragliche Spalte nicht NULLABLE ist.

wahrscheinlich irrelevant, aber hey .....

    
Transact Charlie 12.03.2011 00:37
quelle

Tags und Links