Optimierung einer Abfrage

16/09/2008 - 17:39 von Irmgard Schwenteck | Report spam
Hallo,

nach diversen Versuchen frage ich doch noch einmal hier.
ich bekomm eine Abfrage nicht wesentlich schneller und weiß jetzt nicht,
wo ich noch drehen könnte.

Kurzfassung :
SELECT
Person.id, (noch 2 integer-Spalten),
Person.geburtsdatum,
Unterabteilung.AbtID,
Periode.id AS monat,
Periode.lang_text,
DATEDIFF([month], Person.geburtsdatum, CONVERT(datetime,
Periode.lang_text, 101)) AS monat_var_monat,
FROM Person INNER JOIN Unterabteilung
ON Person.Uid = Unterabteilung.id
INNER JOIN Periode
ON Person.Arbeitsjahr = Periode.Arbeitsjahr
WHERE periode.id > 500


Die Tabelle Person hat mehr Spalten, bis auf die Datumsspalten alles
Spalten mit nem Fremdschlüssel. Sogar das geschlecht ist eine ID und in
einer Faktentabelle hinterlegt.
Aber das sollte eigentlich keinen Einfluß hier haben.

Das "Datum" in Periode ist vom Typ varchar(200)
Die Spalte AbtID gibt es nicht in der Tabelle Person; ist alles sehr
heftig normalisiert.

Person: 2,1 Mio Datensàtze
Unterabteilung: 10.400 Datensàtze
Periode ~ 1200 Datensàtze

zu 1x Person.Arbeitsjahr gibts also jeweils 12x Periode.Arbeitsjahr
Gefiltert für den Zeitraum ergibt das > 21 Mio Zeilen.
Dauert ~ 18 Minuten.

temporàre Tabellen sehe ich bei set statistics io nicht.

für die Tabelle Person: Scananzahl 1, logische Lesevorgànge 44910,
physische Lesevorgànge 61, Read-Ahead-Lesevorgànge 16208


Auf Periode.Arbeitsjahr gab es schon einen Index.
Ein Index auf Unterabteilung (id, AbtID) versprach zumindest im
geschàtzten Ausführungsplan leichte Besserung,
noch besser ist sicher Unterabteilung (AbtID, id).

Der clustered Index Scan auf Person, um den man ja nicht umhinkommt,
weil alle Sàtze berücksichtigt werden müssen, nimmt im Ausführungsplan
jetzt 47% ein (ohne den Index 45%).
Der Rest geht vor allem auf die beiden Hash-Tabellen, 29% auf
Person-Periode.

Dauert das eben so lange, weil es so viel ist oder gibt es noch
Möglichkeiten?
Könnte es noch etwas bringen, auf die Tabelle Personen zunàchst eine
Abfrage mit den benötigten Spalten zu erstellen?

Gruß
Irmgard
 

Lesen sie die antworten

#1 Christoph Ingenhaag
16/09/2008 - 18:00 | Warnen spam
Hallo Irmgard

welche SQL Server Version?

Bitte Tabelle Person, Tabelle Periode und Tabelle Unterabteilung sowie
sàmtliche Indizes skripten.
Und das komplette Statement dazu.

Sonst gibts zu viel Raterei...

Vg
Christoph

Ähnliche fragen