Das kenne ich auch von FireBird.
Ab der zweiten Abfrage wird's schneller, weil ein Teil der Datenbankdatei bereits gelesen wurde und damit im Cache der Festplatte liegt.
Wenn Du lange wartest und in der Zeit andere Programme die Festplatte extensiv nutzen, wird die Abfrage wieder einmal langsamer werden und beim zweiten Mal wieder schneller.
Das Problem liegt eher an Windows und der Hardware als an der Datenbank.
SQL-Code:
SELECT
ABFDocAuftragNr,
ABFDocDatum,
ABFDocKundeKurzbez,
IIF(Count(ABFDocAuftragID) > 1,Max(ABFPosMenge) - Min(ABFPosMenge), Max(ABFPosMenge)) as offen
FROM
(
ABFDok
INNER JOIN ABFPos ON ABFPos.ABFPosAuftragID = ABFDok.ABFDocAuftragID
)
INNER JOIN sArtikel ON ABFPos.ABFPosArtNr = sArtikel.ArtNr
where ABFDocOptFertig = false
and ABFDocVisType = 1
and ABFPosEPreis > 0
and ABFPosType in(0,7)
and ABFPosNr <>''
and ABFPosArtNr = :ArtNr
GROUP BY
ABFDocAuftragNr,
ABFDocDatum,
ABFDocKundeKurzbez,
ABFdocVisType
order by
ABFDocAuftragNr;
Zu welcher Tabelle gehören diese Einschränkungen?
SQL-Code:
where ABFDocOptFertig = false
and ABFDocVisType = 1
and ABFPosEPreis > 0
and ABFPosType in(0,7)
and ABFPosNr <> ''
and ABFPosArtNr = :ArtNr
Eventuell solltest Du die entsprechende(n) Tabelle(n) erst per Wherebedingung einschränken und dann per Join die anderen Tabellen dazunehmen.
Wie sehen die Tabellendefinitionen aus? Wie sehen die Indexdefinitionen aus?