Was ist der bevorzugte Weg und warum? Wird es Leistungsunterschiede geben, wenn Keywords wie JOIN verwendet werden?
Danke
Der zweite Weg ist der klassische Weg, bevor das join
Schlüsselwort existiert.
Normalerweise generiert der Abfrageprozessor die gleichen Datenbankoperationen aus den beiden Abfragen, so dass die Leistung nicht beeinträchtigt wird.
Die Verwendung von join
beschreibt besser, was Sie in der Abfrage tun. Wenn Sie viele Joins haben, ist es auch besser, weil die verbundene Tabelle und ihre Bedingung nebeneinander liegen, anstatt alle Tabellen an einer Stelle und alle Bedingungen in einer anderen zu setzen.
Ein weiterer Aspekt ist, dass es einfacher ist, versehentlich einen ungebundenen Join mit der zweiten Methode auszuführen, was zu einem Kreuz-Join führt, der alle Kombinationen aus den beiden Tabellen enthält.
In einigen SQL-Engines ist das zweite Formular (assoziative Joins) deaktiviert. Benutze das erste Formular.
Zweitens ist weniger explizit, verursacht Beginers zu SQL, um beim Schreiben von Code zu pausieren. Ist viel schwieriger in komplexen SQL aufgrund der Reihenfolge der Join-Match-Anforderung mit der WHERE-Klausel Sequenz zu verwalten - sie (Sequenz im Code) müssen übereinstimmen oder die zurückgegebenen Ergebnisse ändern sich die zurückgegebene Datensatz ändern, was wirklich widerspricht der Gedanke, dass die Sequenz die Ergebnisse nicht verändern sollte, wenn Elemente auf der gleichen Ebene betrachtet werden.
Wenn Joins erstellt werden, die mehrere Tabellen enthalten, wird es WIRKLICH schwierig, mit dem zweiten Formular recht schnell zu programmieren.
EDIT: Leistung: Ich denke, Codierung, Debugging Leichtigkeit Teil der persönlichen Leistung, damit die Leichtigkeit der Bearbeitung / debuggen / Wartung ist besser performant mit der ersten Form - es dauert nur weniger Zeit, Sachen während der Entwicklung und Wartung zu tun / zu verstehen Zyklen.
Die meisten aktuellen Datenbanken werden beide Abfragen in denselben Ausführungsplan optimieren. Verwenden Sie jedoch die erste Syntax, es ist der aktuelle Standard. Wenn Sie diese Joinsyntax lernen und verwenden, hilft das bei Abfragen mit LEFT OUTER JOIN
und RIGHT OUTER JOIN
. die mit der älteren Syntax mit den Joins in der WHERE-Klausel schwierig und problematisch werden.
Das Filtern von Joins ausschließlich mit WHERE kann in einigen gängigen Szenarien äußerst ineffizient sein. Zum Beispiel:
%Vor%Die meisten Datenbanken werden diese Abfrage im wahrsten Sinne des Wortes ausführen, indem sie zunächst das kartesische Produkt der Personen- und Unternehmenstabellen verwenden und dann nach denen filtern, die übereinstimmende Firmen-ID- und ID-Felder haben. Während das vollständig unbeschränkte Produkt nirgendwo außer im Speicher und dann nur für einen Moment existiert, dauert seine Berechnung einige Zeit.
Ein besserer Ansatz besteht darin, die Einschränkungen gegebenenfalls mit den JOINs zu gruppieren. Dies ist nicht nur subjektiv leichter zu lesen, sondern auch wesentlich effizienter. So:
%Vor%Es ist ein wenig länger, aber die Datenbank ist in der Lage, die ON-Klausel zu betrachten und sie zu verwenden, um den vollständig eingeschränkten JOIN direkt zu berechnen, anstatt mit allem zu beginnen und dann zu begrenzen. Dies ist schneller zu berechnen (besonders bei großen Datensätzen und / oder Joins mit vielen Tabellen) und erfordert weniger Speicher.
Ich ändere jede Abfrage, die ich sehe, die die "comma JOIN" -Syntax verwendet. Meiner Meinung nach ist der einzige Zweck für seine Existenz Prägnanz. Angesichts der Auswirkungen auf die Leistung halte ich dies nicht für einen zwingenden Grund.