*EXISTS Unterabfrageoptimierung: Leistungsunterschied zwischen SELECT 1 und SELECT **
Bei Verwendung des EXISTS-Operators in einer SQL-Abfrage gibt es Streit darüber, ob SELECT 1 oder SELECT * in der Unterabfrage angegeben werden soll. In diesem Artikel werden die Auswirkungen beider Ansätze auf die Leistung untersucht.
**Traditionelle Methode: SELECT ***
Traditionell verwenden Unterabfragen SELECT *, da dadurch alle Spalten in der Unterabfrage abgerufen werden.
<code class="language-sql">IF EXISTS (SELECT * FROM TABLE WHERE Columns=@Filters) BEGIN UPDATE TABLE SET ColumnsX=ValuesX WHERE Columns=@Filters END</code>
Alternative Methode: SELECT 1
Datenbankexperten empfehlen, dass für EXISTS-Prüfungen die Verwendung von SELECT 1 effizienter ist, da nur ein einzelner Wert zurückgegeben wird.
<code class="language-sql">IF EXISTS (SELECT 1 FROM TABLE WHERE Columns=@Filters) BEGIN UPDATE TABLE SET ColumnsX=ValuesX WHERE Columns=@Filters END</code>
Leistungsunterschied
Trotz der angeblichen potenziellen Leistungsvorteile von SELECT 1 ist Microsoft SQL Server darauf ausgelegt, Unterabfragen des EXISTS-Operators zu optimieren. Unabhängig davon, ob Sie SELECT 1 oder SELECT * verwenden, gibt SQL Server keine Daten an das System zurück.
Verifizierung
Um diese Optimierung zu überprüfen, versuchen Sie, die folgende Abfrage auszuführen:
<code class="language-sql">SELECT whatever FROM yourtable WHERE EXISTS( SELECT 1/0 FROM someothertable WHERE a_valid_clause )</code>
Es wird kein Fehler ausgegeben, selbst wenn die Unterabfrage eine ungültige Division durchführt. Dies weist darauf hin, dass die EXISTS-Liste in der SELECT-Unterabfrage nicht ausgewertet wird.
SQL-Standard
Der ANSI SQL 1992-Standard besagt eindeutig, dass eine SELECT-Liste, die nur „*“ in der EXISTS-Unterabfrage enthält, einem beliebigen Literal entspricht.
Fazit
Basierend auf den Optimierungsfunktionen und SQL-Standards von SQL Server gibt es keinen Leistungsunterschied bei der Verwendung von SELECT 1 oder SELECT * in einer EXISTS-Unterabfrage. Beide Methoden liefern die gleichen Ergebnisse mit gleicher Effizienz.
Das obige ist der detaillierte Inhalt vonSELECT 1 vs. SELECT * in EXISTS-Unterabfragen: Ist es für die Leistung wichtig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!