Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL 2000 vs. SQL 2005 - Änderungen in Ausführungsplänen (https://www.delphipraxis.net/124843-sql-2000-vs-sql-2005-aenderungen-ausfuehrungsplaenen.html)

DerAndereMicha 26. Nov 2008 08:51

Datenbank: MS SQL Server • Version: 2000/2005 • Zugriff über: ADO

SQL 2000 vs. SQL 2005 - Änderungen in Ausführungsplänen
 
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

mkinzler 26. Nov 2008 08:56

Re: SQL 2000 vs. SQL 2005 - Änderungen in Ausführungsplänen
 
Es scheint als ob er das Maximum mehrmals ermittelt

DerAndereMicha 26. Nov 2008 09:07

Re: SQL 2000 vs. SQL 2005 - Änderungen in Ausführungsplänen
 
Sollte des Rätsels Lösung wirklich so einfach sein? Auf jedenfall klingt das logisch für mich - vielen Dank.

Gruß
Micha

nahpets 26. Nov 2008 09:12

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

Zitat von DerAndereMicha
Sollte des Rätsels Lösung wirklich so einfach sein? Auf jedenfall klingt das logisch für mich - vielen Dank.

Gruß
Micha

Ja, dass (SELECT MAX(ZUSATZID) FROM INHALTE WHERE ADRESSEN_ID=4403) wird für jede Zeile der "darüberliegenden" Abfrage ausgeführt und wenn das viele Zeilen sind, dann dauert das...

DerAndereMicha 26. Nov 2008 09:19

Re: SQL 2000 vs. SQL 2005 - Änderungen in Ausführungsplänen
 
Wäre dann nur noch schön zu wissen, warum es der SQL Server 2000 nicht so macht. Beim dem ist das Verhalten ja bei beiden Versionen der Abfrage identisch ...

mkinzler 26. Nov 2008 09:19

Re: SQL 2000 vs. SQL 2005 - Änderungen in Ausführungsplänen
 
Der scheint die Abfrage besser zu optimieren

DerAndereMicha 26. Nov 2008 09:48

Re: SQL 2000 vs. SQL 2005 - Änderungen in Ausführungsplänen
 
Alles klar. Danke nochmal.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz