SQL Abfrage dauert länger als andere obwohl weniger Datensätze?

17/04/2009 - 10:30 von Klocker Thomas | Report spam
Hallo @all!

Ich habe eine DB (SQL Server 2005) mit 5 Tabellen. Diese 5 Tabellen habe ich
über JOINS miteinander verknüpft in meinen Abfragen. Nun habe ich 2 Stored
Procedures, die beide eigentlich genau gleich aussehen, ausser das eine der
beiden 3 Parameter erwartet. SIe sehen in etwa so aus:

stored procedure1: ohne parameter
SELECT <meinespalten+joins> WHERE T_STATE != 4

stored procedure2: mit parameter
SELECT <meinespalten+join> WHERE T_STATE = @STATE AND (T_DATE_FROM >=
@DATE_FROM AND T_DATE_TO <= @DATE_TO)

die beiden stored procedures besitzen die genau selben SELECT Abfragen und
Joins, lediglich die Parameter STATE, DATE_FROM und DATE_TO sind bei der 2ten
stored procedure mit dabei.

Nun liefert mir die erste Abfrage 1300 Datensàtze in 20 Sekunden, die 2te
Abfrage liefert mir 8100 in 16 Sekunden.
Wie kann es sowas geben? Bin ein biserl ratlos...

Vielleicht hat ja jemand eine Idee?
Vielen Dank für jede Hilfe

Gruß

Tom
 

Lesen sie die antworten

#1 Olaf Doschke
17/04/2009 - 11:12 | Warnen spam
Hallo Thomas,

SQL Laufzeit ist nicht einfach proportional zur Anzahl der
Sàtze oder Bytes, die über das Netzwerk gehen, auch wenn
das oft genug das langsamste am ganzen Vorgang ist.

Wenn T_State nicht indiziert ist muß die erste Abfrage einen
Full Table Scan machen, um alle Sàtze mit T_STATE != 4
herauszufischen.

Wenn die 2. Abfrage auch nur zum Teil per Indizes optimierbar
ist, kann sie schneller laufen als die erste, obwohl sie sogar mehr
Sàtze liefert.

Führe die Abfragen mal über SQL Server Management Studio
direkt aus. Beachte die Zeit bis zur Anzeige erster Sàtze, daß
ist die Zeit, die der Server braucht, bevor er anfàngt Ergebnisse
über das Netzwerk zu schicken.

Wenn Du schon da bist, kannst Du die Abfrage markieren
und auch mit STRG+M den tatsàchlichen Ausführungsplan
mit einschließen und nach der Abfrage in einem Zusatzreiter
neben dem Abfrageergebnis auch sehen, wie die Abfrage
umgesetzt wurde und was dabei am meisten gekostet hat.

Tschüß, Olaf.

Ähnliche fragen