Es ist jedoch offensichtlich, dass der MS SQL-Server die Kurzschlusstheorie unterstützt, um die Leistung zu verbessern, indem unnötige Überprüfungen vermieden werden.
Unterstützendes Beispiel:
SELECT 'TEST'
WHERE 1 = 'A'
SELECT 'TEST'
WHERE 1 = 1 OR 1 = 'A'
Hier würde das erste Beispiel zu dem Fehler 'Konvertierung fehlgeschlagen, wenn der Varchar-Wert' A 'in den Datentyp int konvertiert wird.'
Während die zweite Bedingung leicht ausgeführt wird, da die Bedingung 1 = 1 als WAHR ausgewertet wird und daher die zweite Bedingung überhaupt nicht ausgeführt wird.
Außerdem
SELECT 'TEST'
WHERE 1 = 0 OR 1 = 'A'
Hier würde die erste Bedingung als falsch ausgewertet, und daher würde das DBMS für die zweite Bedingung gehen, und Sie erhalten erneut den Konvertierungsfehler wie im obigen Beispiel.
HINWEIS: Ich habe den fehlerhaften Zustand nur geschrieben, um zu realisieren, ob der Zustand ausgeführt oder kurzgeschlossen wird, wenn die Abfrageergebnisse in einem Fehler den ausgeführten, anderweitig kurzgeschlossenen Zustand bedeuten.
EINFACHE ERKLÄRUNG
Erwägen,
WHERE 1 = 1 OR 2 = 2
Da die erste Bedingung auf TRUE ausgewertet wird, ist es bedeutungslos, die zweite Bedingung auszuwerten, da ihre Auswertung in einem beliebigen Wert das Ergebnis überhaupt nicht beeinflussen würde. Daher bietet sich SQL Server eine gute Gelegenheit, Zeit für die Ausführung von Abfragen zu sparen, indem unnötige Bedingungsprüfungen oder Auswertungen übersprungen werden .
Im Fall von "ODER", wenn die erste Bedingung als WAHR bewertet wird, wird die gesamte durch "ODER" verbundene Kette als wahr angesehen, ohne andere zu bewerten.
condition1 OR condition2 OR ..... OR conditionN
Wenn die Bedingung1 als wahr ausgewertet wird, ruhen Sie alle Bedingungen aus, bis die Bedingung N übersprungen wird. In verallgemeinerten Wörtern bei der Bestimmung der ersten WAHR würden alle anderen durch ODER verknüpften Bedingungen übersprungen.
Betrachten Sie die zweite Bedingung
WHERE 1 = 0 AND 1 = 1
Da die erste Bedingung auf FALSE ausgewertet wird, ist es bedeutungslos, die zweite Bedingung auszuwerten, da ihre Auswertung in einem beliebigen Wert das Ergebnis überhaupt nicht beeinflussen würde. Dies ist wiederum eine gute Gelegenheit für SQL Server, Zeit für die Ausführung von Abfragen zu sparen, indem unnötige Bedingungsprüfungen oder Auswertungen übersprungen werden .
Im Fall von "UND", wenn die erste Bedingung als FALSCH bewertet wird, wird die gesamte mit dem "UND" verbundene Kette als als FALSCH bewertet betrachtet, ohne andere zu bewerten.
condition1 AND condition2 AND ..... conditionN
wenn die condition1 zu ausgewertet wird FALSCH , alle Bedingungen bis ruhen conditionN wäre übersprungenen. In verallgemeinerten Worten bei der Bestimmung von erstem FALSE würden alle anderen durch AND verknüpften Bedingungen übersprungen.
Daher sollte ein weiser Programmierer die Bedingungskette immer so programmieren, dass weniger teure oder am weitesten entfernte Bedingungen zuerst bewertet werden oder der Zustand auf eine Weise angeordnet werden kann, die maximale Kapazität erreichen kann