Mir wurde vorgeschlagen, dass die Verwendung von IF-Anweisungen in t-SQL-Batches die Leistung beeinträchtigt. Ich versuche, eine Bestätigung zu finden oder diese Behauptung zu bestätigen. Ich verwende SQL Server 2005 und 2008.
Die Behauptung ist, dass mit der folgenden Charge:
IF @parameter = 0
BEGIN
SELECT ... something
END
ELSE
BEGIN
SELECT ... something else
END
SQL Server kann den generierten Ausführungsplan nicht wiederverwenden, da für die nächste Ausführung möglicherweise ein anderer Zweig erforderlich ist. Dies impliziert, dass SQL Server einen Zweig vollständig aus dem Ausführungsplan entfernt, auf der Grundlage, dass es für die aktuelle Ausführung bereits bestimmen kann, welcher Zweig benötigt wird. Ist das wirklich wahr?
Außerdem, was passiert in diesem Fall:
IF EXISTS (SELECT ....)
BEGIN
SELECT ... something
END
ELSE
BEGIN
SELECT ... something else
END
Wo ist es nicht möglich im Voraus zu bestimmen, welche Verzweigung ausgeführt wird?