Über welche Datenmengen reden wir denn überhaupt? 16 Sekunden bei 100 Sätzen ist sicherlich lang, 16 Sekunden bei 100.000.000.000 eher nicht
Wie groß ist die Datenbankdatei?
Nur hingedaddelt und ungetestet und zusätzlich keine Ahnung, ob
Access mit 'ner Syntax in der Form zurechtkommt. Aber eventuell wird verständlich, worauf ich hinausmöchte. Und ob das dann auch noch schneller wird kommt auf Versuch und Irrtum an. Grundsätzlich versuche ich bei großen Datenmengen diese möglichst früh maximal einzuschränken,
bevor per Join mehrere Tabellen zusammengefügt werden. (Und Ja, die Lesbarkeit von
SQL-Statements kann darunter leiden. Kürzere Laufzeiten gehen leider zuweilen (massiv) zu Lasten der Lesbarkeit der SQLs.)
SQL-Code:
select
ABFDocAuftragNr,
ABFDocDatum,
ABFDocKundeKurzbez,
IIF(Count(ABFDocAuftragID) > 1,Max(ABFPosMenge) - Min(ABFPosMenge), Max(ABFPosMenge)) as offen
from
(
(
select ABFDocAuftragNr, ABFDocDatum, ABFDocKundeKurzbez, ABFDocAuftragID
from ABFDoc
where ABFDocOptFertig = false
and ABFDocVisType = 1
) a
inner join
(
select ABFPosArtNr, ABFPosMenge
from ABFPos
where ABFPosEPreis > 0
and ABFPosType in(0,7)
and ABFPosNr <> ''
and ABFPosArtNr = :ArtNr
) b on b.ABFPosAuftragID = a.ABFDocAuftragID
) c
group by
ABFDocAuftragNr,
ABFDocDatum,
ABFDocKundeKurzbez,
ABFdocVisType
order by
ABFDocAuftragNr;
Den
inner join sArtikel on c.ABFPosArtNr = sArtikel.ArtNr
hab' ich rausgenommen, da für mich nicht erkennbar ist, ob und ggfls. wofür ein Join auf diese Tabelle erforderlich sein sollte. Im Ergebnis scheinen keine Daten aus sArtikel enthalten zu sein, für die Wherebedingungen scheint sie auch nicht benötigt zu werden. Dann ist sie in diesem
SQL eigentlich auch überflüssig und frist nur Speicher und Laufzeit.
Bevor Du anfängst an Windows und / oder Hardware zu schrauben, schau bitte erstmal, ob Du datenbankseitig eine Beschleunigung hinbekommst. Datenträger haben nunmal Zugriffzeiten > 0, von daher werden Datenbankabfragen auch immer mit Laufzeiten > 0 ausgeführt. Und wenn es dann auch noch über ein Netzwerk geht, muss der APP PC (bei
Access) halt die ganze Datenbankdatei "mal eben über die Leitung ziehen", um dann die Auswertung vornehmen zu können.
Access ist halt keine Datenbank, bei der der Client sagen kann. "Lieber Datenbankserver gib mir mal die Daten entsprechend der Dir hiermit übergebenen Abfrage."
Letztlich sind wir dann aber wieder bei dem Thema:
Access Datenbank langsam, vermutlich reden wir hier über das gleiche WW-System?