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

Stimmt etwas mit Joins nicht, die das Schlüsselwort JOIN in SQL oder MySQL nicht verwenden?

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.