Heim >Datenbank >MySQL-Tutorial >Garantiert SQL eine Kurzschlussauswertung in WHERE-Klauseln?
SQL WHERE-Klauselauswertung: Kurzschlüsse erklärt
Eine häufige Frage zu den WHERE
-Klauseln von SQL betrifft die Auswertung boolescher Ausdrücke: Verwendet SQL eine Kurzschlussauswertung? Dies bedeutet, dass die Auswertung stoppt, sobald das Ergebnis sicher ist, und möglicherweise spätere Teile des Ausdrucks umgeht.
ANSI SQL Standard- und Evaluierungsreihenfolge
Der ANSI-SQL-Standard definiert die Kurzschlussauswertung für WHERE
-Klauseln nicht explizit. Der ANSI SQL Draft 2003 legt fest, dass die Reihenfolge der Ausdrucksauswertung von der Implementierung abhängt. Dies überlässt die Entscheidung, ob die Kurzschlüsse zu einzelnen Datenbankanbietern implementiert werden sollen oder nicht.
Datenbankspezifische Implementierung
Daher variiert das Kurzschlussverhalten je nach Datenbanksystem erheblich:
AND
- und OR
-Operatoren.OPTIMIZER_MODE
-Hinweis aktiviert werden.AND
-Operator.Anschauliches Beispiel
Bedenken Sie diese Abfrage:
<code class="language-sql">SELECT * FROM Table t WHERE @key IS NULL OR (@key IS NOT NULL AND @key = t.Key) </code>
Wenn @key
NULL
ist, ist die erste Bedingung (@key IS NULL
) TRUE
. In SQL Server würde die Kurzschlussauswertung die zweite Bedingung (@key IS NOT NULL AND @key = t.Key
) überspringen, da das Gesamtergebnis bereits bekannt ist.
Schlüssel zum Mitnehmen
Der ANSI-SQL-Standard garantiert keine Kurzschlussauswertung in WHERE
-Klauseln. Seine Präsenz und sein Verhalten sind datenbankspezifisch. Konsultieren Sie immer die Dokumentation Ihres Datenbanksystems, um dessen Evaluierungsstrategie zu verstehen.
Das obige ist der detaillierte Inhalt vonGarantiert SQL eine Kurzschlussauswertung in WHERE-Klauseln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!