Forums Neueste Beiträge
 

1 Abfrage dauert ewig - 2+1 geht viel schneller?!

15/04/2008 - 14:33 von k.kling | Report spam
Hallo Group!

Ich habe folgendes, für mich nicht nachvollziehbares Phànomen:
ich habe eine Tabelle (wen's interessiert: Wetterdaten des DWD, frei
zugànglich von deren HP downloadbar), die jede Menge Schlüsselwerte
enthàlt, welche i.d.R. 3-4 Mal je Datensatz vorkommen (z.B.
Niederschlagsart früh, mittags, abends). Dazu habe ich kleine Tabellen
mit den Schlüsselwerten und deren Klartextbedeutung angelegt.
Die Schlüsselwerte sind allesamt vom Typ "integer" und in den
Schlüsseltabellen der unique key.
Wenn ich nun eine Abfrage baue, die mir alle Schlüsselfelder
"übersetzt" in die Klartexte, dann dauert diese Abfrage sehr lange.
Also habe ich einen (bestimmten) Schlüssel, der gleich 4x gezogen
wird, 'rausgenommen - und siehe da, wir sprechen wieder von
"Bruchteilen von Sekunde".
Eine zweite Abfrage enthàlt nur den Unique Key der Haupttabelle und
die 4 Schlüsselwerte, die aus der ersten Abfrage entfernt wurden.
Dann gibt es eine dritte Abfrage, in der ich die beiden
vorhergehendene wieder zusammenführe. Das Ergebnis ist (bis auf die
Reihenfolge der Felder) also identisch mit der ursprünglichen
Gesamtabfrage - nur dauert sie etwa 1/10 so lange.

Wie kommt's??? Oder anders: was muss ich tun, damit es auch ohne den
Umweg geht?

Besten Dank für Tipps,

Kristof Kling

Access 2002, Windows XP

Gesamtabfrage (die sehr lange dauert, 20 Sekunden und mehr):
SELECT tDWD_Rohdaten.STAT AS Station,
tDWD_Rohdaten.[JA] & "-" & Format(tDWD_Rohdaten.[MO],"00") & "-" &
Format(tDWD_Rohdaten.[TA],"00") AS Datum,
tDWD_Rohdaten.[P01]/10 AS Luftdruck1, tDWD_Rohdaten.[P02]/10 AS
Luftdruck2, tDWD_Rohdaten.[P03]/10 AS Luftdruck3, tDWD_Rohdaten.[PM]/
10 AS Luftdruck_mittel,
tDWD_Rohdaten.[TT1]/10 AS Temp1_2m, tDWD_Rohdaten.[tt2]/10 AS
Temp2_2m, tDWD_Rohdaten.[TT3]/10 AS Temp3_2m, tDWD_Rohdaten.[TMK]/10
AS TempMittel_2m,
tDWD_Rohdaten.[TXK]/10 AS TempMax_2m, tDWD_Rohdaten.[TNK]/10 AS
TempMin_2m, tDWD_Rohdaten.[TRK]/10 AS TempDiff_2m,
tDWD_Rohdaten.[TG]/10 AS TempMin_0m, IIf(tDWD_Rohdaten.
[STGK]="S",True,False) AS Schnee_auf_Thermometer,
tDWD_Rohdaten.[UP1]/100 AS Feuchte1_rel, tDWD_Rohdaten.[UP2]/100 AS
Feuchte2_rel, tDWD_Rohdaten.[UP3]/100 AS Feuchte3_rel, tDWD_Rohdaten.
[UPM]/100 AS FeuchteMittel_rel,
tpDK_1.[Wert] AS Wind1, tDWD_Rohdaten.[FK1] AS Bft1,
tpDK_2.[Wert] AS Wind2, tDWD_Rohdaten.[FK2] AS Bft2,
tpDK_3.[Wert] AS Wind3, tDWD_Rohdaten.[FK3] AS Bft3,
tDWD_Rohdaten.[FMK]/10 AS BftMittel, tDWD_Rohdaten.[FX]/10 AS
WindMax,
CStr(tDWD_Rohdaten.[N1]) & "/8" AS Bedeckt1, CStr(tDWD_Rohdaten.[N2])
& "/8" AS Bedeckt2, CStr(tDWD_Rohdaten.[N3]) & "/8" AS Bedeckt3,
CStr(tDWD_Rohdaten.[NM]/10) & "/8" AS BedecktMittel,
tDWD_Rohdaten.[SD]/10 AS Sonnenstd,
tpVK_1.[Wert] AS Sicht1, tpVK_2.[Wert] AS Sicht2, tpVK_3.[Wert] AS
Sicht3,
tpEK_1.[Wert] AS Boden1, tpEK_2.[Wert] AS Boden2, tpEK_3.[Wert] AS
Boden3,
tpVAK.[Wert] AS Niederschlagsart, tpVBK.[Wert] AS
Niederschlag_abgesetzt, tpVCK.[Wert] AS Wetterersch,
tDWD_Rohdaten.[RK1]/10 AS Niederschlag1, tpRF_1.[Wert] AS
NiederschlagTyp1, tDWD_Rohdaten.RKF1,
tDWD_Rohdaten.[RK2]/10 AS Niederschlag2, tpRF_2.[Wert] AS
NiederschlagTyp2,
tDWD_Rohdaten.[RK3]/10 AS Niederschlag3, tpRF_3.[Wert] AS
NiederschlagTyp3,
tDWD_Rohdaten.[RS]/10 AS Niederschlag24h, tpRF_4.[Wert] AS
NiederschlagTyp24h,
tDWD_Rohdaten.[SH] AS Schneehöhe, tpSA.[Wert] AS Schneedecke,
tDWD_Rohdaten.[NSH] AS Neuschnee

FROM (((((((((((((((((tDWD_Rohdaten
LEFT JOIN tpDK AS tpDK_1 ON tDWD_Rohdaten.DK1 = tpDK_1.Code)
LEFT JOIN tpDK AS tpDK_2 ON tDWD_Rohdaten.DK2 = tpDK_2.Code)
LEFT JOIN tpDK AS tpDK_3 ON tDWD_Rohdaten.DK3 = tpDK_3.Code)

LEFT JOIN tpVK AS tpVK_1 ON tDWD_Rohdaten.VK1 = tpVK_1.Code)
LEFT JOIN tpVK AS tpVK_2 ON tDWD_Rohdaten.VK2 = tpVK_2.Code)
LEFT JOIN tpVK AS tpVK_3 ON tDWD_Rohdaten.VK3 = tpVK_3.Code)

LEFT JOIN tpEK AS tpEK_1 ON tDWD_Rohdaten.EK1 = tpEK_1.Code)
LEFT JOIN tpEK AS tpEK_2 ON tDWD_Rohdaten.EK2 = tpEK_2.Code)
LEFT JOIN tpEK AS tpEK_3 ON tDWD_Rohdaten.EK3 = tpEK_3.Code)

LEFT JOIN tpRF AS tpRF_1 ON tDWD_Rohdaten.RKF1 = tpRF_1.Code)
LEFT JOIN tpRF AS tpRF_2 ON tDWD_Rohdaten.RKF2 = tpRF_2.Code)
LEFT JOIN tpRF AS tpRF_3 ON tDWD_Rohdaten.RKF3 = tpRF_3.Code)
LEFT JOIN tpRF AS tpRF_4 ON tDWD_Rohdaten.RSF = tpRF_4.Code)

LEFT JOIN tpSA ON tDWD_Rohdaten.SA = tpSA.Code)

LEFT JOIN tpVAK on tDWD_Rohdaten.VAK = tpVAK.Code)
LEFT JOIN tpVBK ON tDWD_Rohdaten.VBK = tpVBK.Code)
LEFT JOIN tpVCK on tDWD_Rohdaten.VCK = tpVCK.Code);

Einzelabfragen (gehen sehr schnell, <1 Sek.):
Abfrage 1:
SELECT tDWD_Rohdaten.id,
tpRF_1.Wert AS NiederschlagTyp1,
tpRF_2.Wert AS NiederschlagTyp2,
tpRF_3.Wert AS NiederschlagTyp3,
tpRF_4.Wert AS NiederschlagTyp24h
FROM (((tDWD_Rohdaten
LEFT JOIN tpRF AS tpRF_1 ON tDWD_Rohdaten.RKF1 = tpRF_1.Code)
LEFT JOIN tpRF AS tpRF_2 ON tDWD_Rohdaten.RKF2 = tpRF_2.Code)
LEFT JOIN tpRF AS tpRF_3 ON tDWD_Rohdaten.RKF3 = tpRF_3.Code)
LEFT JOIN tpRF AS tpRF_4 ON tDWD_Rohdaten.RSF = tpRF_4.Code;

Abfrage 2:
(wie Gesamtabfrage, nur ohne die Felder "NiederschlagTyp1/2/3/24h)

Abfrage 3 (Aggregat aus 1+2):
SELECT [Abfrage 2].*,
[Abfrage 1].NiederschlagTyp1,
[Abfrage 1].NiederschlagTyp2,
[Abfrage 1].NiederschlagTyp3,
[Abfrage 1].NiederschlagTyp24h
FROM [Abfrage 1]
INNER JOIN [Abfrage 2] ON [Abfrage 1].id = [Abfrage 2].id;
 

Lesen sie die antworten

#1 Thomas Kühn
16/04/2008 - 10:32 | Warnen spam
Hallo Kristof,

Wenn ich nun eine Abfrage baue, die mir alle Schlüsselfelder
"übersetzt" in die Klartexte, dann dauert diese Abfrage sehr lange.
Also habe ich einen (bestimmten) Schlüssel, der gleich 4x gezogen
wird, 'rausgenommen - und siehe da, wir sprechen wieder von
"Bruchteilen von Sekunde".



Wie sieht es mit Beziehungen zwischen tDWD_Rohdaten und
tpDK usw. aus? Das von Dir geschilderte Verhalten passt
zu einem vergessenen Schlüssel oder Beziehung.


Gruß Thomas

http://www.thomas-kuehn.de

Ähnliche fragen