3 Stimmen

SQL Server - Abfrageausführungsplan für bedingte Anweisungen

Wie werden bedingte Anweisungen (wie IF ... ELSE ) den Abfrageausführungsplan in SQL Server (2005 und höher) beeinflussen?

Können bedingte Anweisungen zu schlechten Ausführungsplänen führen, und gibt es irgendeine Form von bedingten Anweisungen, bei denen Sie im Hinblick auf die Leistung vorsichtig sein müssen?

** Bearbeitet um hinzuzufügen ** :

Ich beziehe mich speziell auf den zwischengespeicherten Abfrageausführungsplan. Werden zum Beispiel beim Zwischenspeichern des Abfrageausführungsplans in der folgenden Instanz zwei Ausführungspläne für jedes Ergebnis der Bedingung zwischengespeichert?

DECLARE @condition BIT

IF @condition = 1
BEGIN
    SELECT * from ...
END
ELSE
BEGIN
    SELECT * from ..
END

2voto

Meff Punkte 5769

Bei diesem Ansatz werden die Pläne oft neu kompiliert. Ich versuche in der Regel, sie aufzuteilen, so dass Sie am Ende mit:

DECLARE @condition BIT

IF @condition = 1 
BEGIN 
 EXEC MyProc1
END 
ELSE 
BEGIN 
 EXEC MyProc2
END

Auf diese Weise gibt es keinen Unterschied für die Endbenutzer, und MyProc1 und 2 erhalten ihre eigenen, ordnungsgemäß zwischengespeicherten Ausführungspläne. Eine Prozedur, eine Abfrage.

0 Stimmen

@Meff (+1) ist richtig. Meine vorherige Antwort war es nicht (daher habe ich sie gelöscht).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X