*EXISTS-Klauselleistung: SELECT 1 vs. SELECT **
In SQL wird die EXISTS-Klausel verwendet, um zu prüfen, ob in der Unterabfrage Zeilen vorhanden sind, die der angegebenen Bedingung entsprechen. Entwickler verwenden seit langem sowohl SELECT 1 als auch SELECT * in EXISTS-Abfragen, was die Frage aufwirft: Welcher Ansatz ist effizienter?
SQL Server-Optimierung
Laut Microsoft ist SQL Server intelligent genug, um die Verwendung von EXISTS unabhängig von der SELECT-Liste der Unterabfrage zu erkennen. Da keine Daten an das System zurückgegeben werden, sind die Klauseln SELECT * und SELECT 1 hinsichtlich der Leistung gleichwertig.
Laut Microsoft-Dokumentation:
"Die Auswahlliste einer durch EXISTS eingeführten Unterabfrage enthält fast immer ein Sternchen (). Es gibt keinen Grund, die Spaltennamen aufzulisten, da Sie nur testen, ob es Zeilen gibt, die die Bedingungen erfüllen in der Unterabfrage .*"
angegebenSelbstverifizierung
Um dieses Verhalten zu bestätigen, können Sie die folgende Abfrage ausführen:
<code class="language-sql">SELECT whatever FROM yourtable WHERE EXISTS(SELECT 1/0 FROM someothertable WHERE a_valid_clause)</code>
Wenn die SELECT-Liste teilnimmt, löst diese Abfrage einen Fehler durch Division durch Null aus. Da SQL Server jedoch den Kontext der EXISTS-Klausel versteht, führt es keine Berechnungen für die SELECT-Liste durch.
SQL-Standard
Der ANSI SQL 1992-Standard verdeutlicht dieses Verhalten weiter und besagt, dass im Kontext des EXISTS-Prädikats die Auswahlliste „*“ jedem Literalwert entspricht.
Fazit
In SQL Server hat die Auswahl von SELECT 1 und SELECT * in der EXISTS-Klausel keinen Einfluss auf die Leistung. Beide Methoden liefern die gleichen Ergebnisse, da der Optimierer ihren Zweck erkennt und keine Daten an das System zurückgibt.
Das obige ist der detaillierte Inhalt vonOptimierung der EXISTS-Klausel: SELECT 1 vs. SELECT * – Ist das wichtig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!