Heim >Datenbank >MySQL-Tutorial >EXISTS-Unterabfragen: SELECT 1 oder SELECT * – Ist das für die Leistung wichtig?
*EXISTS-Unterabfrage: SELECT 1 vs. SELECT **
Bei der Verwendung der EXISTS-Unterabfrage in SQL lautet eine häufige Frage: Sollte SELECT 1 oder SELECT * in der Unterabfrage verwendet werden?
*SELECT vs. SELECT 1**
Früher dachte man, dass SELECT 1 effizienter sei als SELECT * in der EXISTS-Unterabfrage. Dies ist jedoch nicht der Fall. SQL Server optimiert die EXISTS-Prüfung, um unabhängig von den in der SELECT-Liste der Unterabfrage angegebenen Spalten KEINE DATEN an das System zurückzugeben.
Microsofts Perspektive
Laut Microsoft: „Die SELECT-Liste 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 angegebenen Bedingungen erfüllen.“ in der Unterabfrage „
Demo
Um dies zu überprüfen, betrachten Sie die folgende Abfrage:
<code class="language-sql">SELECT whatever FROM yourtable WHERE EXISTS( SELECT 1/0 FROM someothertable WHERE a_valid_clause )</code>
Wenn SELECT * tatsächlich eine Operation für die ausgewählten Spalten ausführt, führt die Abfrage zu einem Fehler beim Teilen durch Null. Dies ist jedoch nicht der Fall, was darauf hinweist, dass die SELECT-Liste der Unterabfrage ignoriert und nur zur Bestimmung der Existenz der Zeile verwendet wird.
SQL-Standard
DerSQL-Standard unterstützt auch diese Ansicht: „Wenn '' nur in einer
Fazit
Zusammenfassend gibt es keinen Leistungsunterschied bei Verwendung von SELECT 1 oder SELECT * in der EXISTS-Unterabfrage. Daher wird empfohlen, welche Option besser lesbar ist oder mit Ihrem Codierungsstil übereinstimmt.Das obige ist der detaillierte Inhalt vonEXISTS-Unterabfragen: SELECT 1 oder SELECT * – Ist das für die Leistung wichtig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!