Joins ausschließlich mit WHERE
filtern 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 führen diese Abfrage buchstäblich aus und nehmen zuerst das kartesisches Produkt
der people
und companies
Tabellen und dann Filtern nach denen, die übereinstimmende companyID
haben und id
Felder. Während das vollständig uneingeschränkte Produkt nirgendwo anders als im Speicher und dann nur für einen Moment existiert, nimmt seine Berechnung einige Zeit in Anspruch.
Ein besserer Ansatz besteht darin, die Einschränkungen mit JOIN
zu gruppieren s wo relevant. Das ist nicht nur subjektiv besser ablesbar, sondern auch deutlich effizienter. Also:
SELECT * FROM people p JOIN companies c ON p.companyID = c.id
WHERE p.firstName = 'Daniel'
Es ist etwas länger, aber die Datenbank kann den ON
sehen -Klausel und verwenden Sie sie, um den vollständig eingeschränkten JOIN
zu berechnen direkt, anstatt mit alles anzufangen und dann nach unten begrenzen. Dies ist schneller zu berechnen (insbesondere bei großen Datensätzen und/oder Joins mit vielen Tabellen) und benötigt weniger Speicher.
Ich ändere jede Abfrage, die ich sehe, die das "Komma JOIN
verwendet "-Syntax. Meiner Meinung nach ist der einzige Zweck ihrer Existenz Prägnanz. In Anbetracht der Auswirkungen auf die Leistung halte ich dies nicht für einen zwingenden Grund.