(Moderator)
Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
Delphi 2007 Enterprise
|
Re: Select über 2 Tables dauert mehere Minuten
30. Mai 2006, 13:50
Indiziere die Tabellen entsprechend den Join- und Where Klauseln
SELECT ARTIKEL_NR, Sum(ANZAHL) AS ANZ, Sum(PREIS * ANZAHL) as GPreis
FROM TRANSAKTION T
INNER JOIN TRANSAKTIONDETAILS TD ON(T.ID = TD.TRANSAKTION_ID)
WHERE T.ENDE_DT >= 38864.25 And T.ENDE_DT < 38865.25
And (T.BON_TYP=1 Or T.BON_TYP=2) And ARTIKEL_NR IN('+strL_KuechenArtikel.commatext+')'+
T.SORT_ID = 6 GROUP BY ARTIKEL_NR;
Ich würde erstmal Ende_DT. Bringt sehr viel, weil er dann schon mal nicht mehr alle Daten durchgeht, sondern nur noch die von diesem Tag.
Dann vielleicht das '>=' and '<' durch ein Between A and B ersetzen. Bringt nix, sieht aber höbscher aus.
Du kannst vielleicht einen zusammengesetzen Index erstellen: ENDE_DT + BON_TYP, hängt aber von weiteren Queries ab.
Dann wird noch nach ARTIKEL_NR gefiltert, also auch einen Index rauf (wenn es viele verschiedene sind).
Ich glaube aber, der Datums-Index ist der Wichtigste.
Probier mal, wenns nicht reicht, dann musst du die Artikelnummern normalisieren, Artikelgruppen einführen und über bestimmte Artikelgruppen filtern. Das geht in jedem Fall schneller.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
|