Heim > Datenbank > MySQL-Tutorial > SELECT 1 vs. SELECT * in EXISTS-Unterabfragen: Ist es für die Leistung wichtig?

SELECT 1 vs. SELECT * in EXISTS-Unterabfragen: Ist es für die Leistung wichtig?

Barbara Streisand
Freigeben: 2025-01-15 20:14:42
Original
884 Leute haben es durchsucht

SELECT 1 vs. SELECT * in EXISTS Subqueries: Does it Matter for Performance?

*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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage