JOIN vs. WHERE für optimale Abfrageleistung
Beim Abrufen von Daten aus mehreren Tabellen in einer Datenbank wird üblicherweise entweder ein JOIN oder verwendet WHERE-Klausel, um die Beziehungen zwischen ihnen herzustellen. Dieser Artikel befasst sich mit der Debatte darüber, ob eine Methode von Natur aus schneller ist als die andere.
Die Frage:
Betrachten Sie die folgenden Datenbanktabellen, die Dokumente und die zugehörigen Statistiken darstellen :
CREATE TABLE Document ( Id INT PRIMARY KEY, Name VARCHAR 255 ) CREATE TABLE DocumentStats ( Id INT PRIMARY KEY, DocumentId INT, -- this is a foreign key to table Document NbViews INT )
Um eine Liste von Dokumenten abzurufen, die über 500 Aufrufe erhalten haben, stehen zwei Abfrageoptionen zur Verfügung entstehen:
SELECT * FROM Document, DocumentStats WHERE DocumentStats.Id = Document.Id AND DocumentStats.NbViews > 500
SELECT * FROM Document INNER JOIN DocumentStats ON Document.Id = DocumentStats.Id WHERE DocumentStats.NbViews > 500
Die Antwort:
Theoretisch sollten beide Abfragen gleichwertige Ergebnisse liefern, da sie dieselbe Gleichheitsbedingung verwenden, um die Beziehung zwischen herzustellen die Tische. Moderne Datenbankoptimierer können beide Formate effektiv verarbeiten.
Einige Datenbank-Engines, wie z. B. ältere Versionen von SQL Server, können jedoch unter bestimmten Bedingungen Leistungsunterschiede aufweisen. Im bereitgestellten Beispiel kann ein JOIN vorzuziehen sein, wenn die Tabellengrößen relativ groß sind, da dadurch die Notwendigkeit eines kartesischen Produkts zwischen den beiden Tabellen vermieden wird.
Andererseits eine WHERE-Klausel mit einer expliziten Gleichheit Bedingung kann eine bessere Leistung erbringen, wenn ein eindeutiger Index für die Spalte „DocumentStats.DocumentId“ vorhanden ist.
Zusätzlich Überlegungen:
Es wird immer empfohlen, beide Abfrageoptionen auf dem tatsächlich verwendeten Datenbanksystem zu testen, um den optimalen Ausführungsplan zu ermitteln. Verschiedene Datenbank-Engines und Abfrageoptimierer können sich in unterschiedlichen Szenarien unterschiedlich verhalten.
Darüber hinaus kann die Auswahl von JOIN gegenüber WHERE auch durch Faktoren wie Datenselektivität, Tabellenstruktur und das Vorhandensein zusätzlicher Bedingungen in der Abfrage beeinflusst werden .
Das obige ist der detaillierte Inhalt vonJOIN vs. WHERE: Was ist schneller für Abfragen mit mehreren Tabellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!