Einzelnen Beitrag anzeigen

Benutzerbild von DerAndereMicha
DerAndereMicha

Registriert seit: 1. Jul 2004
Ort: Berlin
208 Beiträge
 
Delphi 2007 Enterprise
 
#1

SQL 2000 vs. SQL 2005 - Änderungen in Ausführungsplänen

  Alt 26. Nov 2008, 08:51
Datenbank: MS SQL Server • Version: 2000/2005 • Zugriff über: ADO
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...
  Mit Zitat antworten Zitat