Das Filtern von Joins ausschließlich mit WHERE kann in einigen gängigen Szenarien äußerst ineffizient sein.Zum Beispiel:
SELECT * FROM people p, companies c WHERE p.companyID = c.id AND p.firstName = 'Daniel'
Die meisten Datenbanken werden diese Abfrage ausführen, ganz wörtlich, zunächst das kartesische Produkt der Firmen und Personen Tabellen zu nehmen und dann von denen, Filterung, die passende CompanyID und id Felder haben. Während das vollständig unbeschränkte Produkt nirgendwo außer im Speicher und nur für einen Moment existiert, dauert seine Berechnung einige Zeit.
Ein besserer Ansatz besteht darin, die Einschränkungen mit den JOINs zu gruppieren, wo dies relevant ist. Dies ist nicht nur subjektiv leichter zu lesen, sondern auch wesentlich effizienter. Thusly:
SELECT * FROM people p JOIN companies c ON p.companyID = c.id
WHERE p.firstName = 'Daniel'
Es ist ein wenig länger, aber die Datenbank ist in der Lage auf der ON-Klausel zu suchen und es verwendet, die vollständig mit beschränktem zu berechnen direkt JOIN, anstatt mit allem, was dem Starten und dann Begrenzung nach unten. Dies ist schneller zu berechnen (insbesondere bei großen Datensätzen und/oder Joins mit vielen Tabellen) und erfordert weniger Arbeitsspeicher.
Ich ändere jede Abfrage, die ich sehe, die die "Komma JOIN" -Syntax verwendet. Meiner Meinung nach ist der einzige Zweck für seine Existenz Prägnanz. In Anbetracht der Auswirkungen auf die Leistung halte ich dies nicht für einen zwingenden Grund.
Vereinbart, die erste ist besser für Klarheit und Kontrolle; Es ist einfacher, den Join-Typ zu ändern, wenn Sie möchten. –