Ausführungsplan in SQL Server 2000
From: Ina Schmitz (web_at_inalein.net)
Date: 03/24/05
- Next message: Frank Zollinger: "Recordset an Curse übergeben, Sinnvoll?"
- Previous message: juergen_at_nospam.at: "sql2k: datetime-spalte und default-datum"
- Next in thread: Elmar Boye: "Re: Ausführungsplan in SQL Server 2000"
- Reply: Elmar Boye: "Re: Ausführungsplan in SQL Server 2000"
- Messages sorted by: [ date ] [ thread ]
Date: Thu, 24 Mar 2005 10:21:32 +0100
Hallo zusammen,
ich lasse mir in SQL Server 2000 mit SET STATISTICS PROFILE ON den
tatsächlichen Ausführungsplan anzeigen.
Auch wenn er etwas lang ist, schicke ich ihn hier zur Beschreibung meiner
Fragen mal mit:
Schritt 1: TABLE SCAN
Physische Operation
Table Scan
Logische Operation
Table Scan
Zeilenanzahl
5000
Durchschnittliche Zeilenlänge
298
E/A-Kosten (geschätzt)
0.17535628
CPU-Kosten (geschätzt)
5.5785002E-3
Anzahl an Ausführungen
1
(Gesamte) Teilbaumkosten
0.18093477
Schritt 2: TABLE SPOOL
Physische Operation
Table Spool
Logische Operation
Lazy Spool
Zeilenanzahl
25000000
Durchschnittliche Zeilenlänge
290
E/A-Kosten (geschätzt)
1.26
CPU-Kosten (geschätzt)
9.0470002E-4
Anzahl an Ausführungen
5000
(Gesamte) Teilbaumkosten
248.25359
Schritt 3: TABLE SCAN
Physische Operation
Table Scan
Logische Operation
Table Scan
Zeilenanzahl
5000
Durchschnittliche Zeilenlänge
298
E/A-Kosten (geschätzt)
0.17535628
CPU-Kosten (geschätzt)
5.5785002E-3
Anzahl an Ausführungen
1
(Gesamte) Teilbaumkosten
0.18093477
Schritt 4: NESTED LOOPS
Physische Operation
Nested Loops
Logische Operation
Inner Join
Zeilenanzahl
7818
Durchschnittliche Zeilenlänge
582
E/A-Kosten (geschätzt)
0.0
CPU-Kosten (geschätzt)
104.5
Anzahl an Ausführungen
1
(Gesamte) Teilbaumkosten
385.43451
Schritt 5: SELECT
Physische Operation
NULL
Logische Operation
NULL
Zeilenanzahl
7818
Durchschnittliche Zeilenlänge
NULL
E/A-Kosten (geschätzt)
NULL
CPU-Kosten (geschätzt)
NULL
Anzahl an Ausführungen
1
(Gesamte) Teilbaumkosten
386.18451
- Frage 1: Da es sich um eine Select-Anweisung handelt, die "einfach" einen
Selfjoin über eine Tabelle durchführt, muss also OHNE angelegte Indizes die
Tabelle für jeden möglichen Joinpartner einmal KOMPLETT durchlaufen werden.
Daher in Schritt 1+3 jeweils der Table Scan. Aus den Teilbaumkosten lese ich
raus, dass dieser Tablescan aber relativ "günstig" ist (0.18093477).
Dazwischen ist aber dann Schritt 2 (TABLE SPOOL) mit relativ hohen Kosten
von 248.25359 geschaltet. So wie ich das verstanden habe, dient ein Table
Spool nur der temporären Zwischenspeicherung. Was aber bringt mir der, wenn
er nur relativ "teuer" ist? Ginge es auch ohne den bzw. warum wird der
ausgeführt?
- Frage 2: Wie kommt man auf die Teilbaumkosten 385.43451 von NESTED LOOPS?
Warum berechnen sich die Teilbaumkosten nicht aus den Kosten für den TABLE
SCAN, also 5000*0.18093477 = 904.67?
- Frage 3: Um die Gesamtkosten der Anfrage zu ermitteln, genügt es, die
Summe der Teilbaumkosten über Schritt1-5 zu bilden?
Wäre sehr dankbar für Tipps, die Ausführungspläne von SQL Server zu
verstehen :-)
Viele Grüße
Ina
- Next message: Frank Zollinger: "Recordset an Curse übergeben, Sinnvoll?"
- Previous message: juergen_at_nospam.at: "sql2k: datetime-spalte und default-datum"
- Next in thread: Elmar Boye: "Re: Ausführungsplan in SQL Server 2000"
- Reply: Elmar Boye: "Re: Ausführungsplan in SQL Server 2000"
- Messages sorted by: [ date ] [ thread ]