Hallo,
ich habe ein Programm, welches schon seit einigen Jahren stabil läuft - bisher immer mit einem
SQL-Server 2000. Nun wurde auf
SQL 2005 umgestellt und auf einmal verhält sich eine
SQL-Abfrage in diesem Programm völlig anders als früher. Sie ist jetzt mindestens 10x so langsam !!! Ich habe mir mal den Ausführungsplan dieses Abfrage angeschaut und feststellen müssen, daß der Server sie anscheinend völlig anders optimiert. Noch mehr staunte ich aber, als ich die Abfrage ein wenig umformulierte, in dem ich eine Unterabfrage in der WHERE-Klausel durch eine Variable ersetzte und auf einmal alles wieder wie vorher lief. Kann mir einer von Euch das unterschiedliche Verhalten des
SQL-Servers bei folgenden Abfragen (eigentlich 2x die selbe - oder?) erklären.
Bitte aber keine Diskussion über den Sinn bzw. Unsinn dieser Abfrage ...
1. Langsame Abfrage:
SQL-Code:
SELECT A.*,B.*
FROM INHALTE A FULL OUTER JOIN ZUSATZ B ON A.ADRESSEN_ID=B.ADRESSEN_ID
WHERE B.ADRESSEN_ID = 4403 OR
A.ZUSATZID = (SELECT MAX(ZUSATZID) FROM INHALTE WHERE ADRESSEN_ID=4403)
2. Schnelle Abfrage:
SQL-Code:
DECLARE @ZID int
SET @ZID = (SELECT MAX(ZUSATZID) FROM INHALTE WHERE ADRESSEN_ID=4403)
SELECT A.*,B.*
FROM INHALTE A FULL OUTER JOIN ZUSATZ B ON A.ADRESSEN_ID=B.ADRESSEN_ID
WHERE B.ADRESSEN_ID = 4403 OR
A.ZUSATZID = @ZID
Gruß
Micha
Der Weg ist das Ziel...