W dniu 08.03.2018 o 01:42, wloochacz pisze:
baza SQLSerwer 2008
do laczenia uzywam blibow ( wlasne firmowe komponenty ) ale jak
probowalem zwyklego TQuery bylo to samo
liczba rekordow w tabelce 2200 ale na rzeczywistej bazie klienta moga
byc miliony
czasy wykonania w narzedziach bazodanowych sa wlasciwie takie same jak w
programie,
kawalek kodu:
tq:=TBQuery.create(nil);
try
tq.databasename:='PETER';
tq.sql.add('SELECT SUM(BETRAG) AS UMNETTO,
SUM(BETRAG+NACHLASSSUMME) AS UMBRUTTO, SUM(STATISTIKMENGE) AS SMENGE,');
tq.sql.add('SUM(DECKUNGSBEITRAG) AS DB, TYP, DATUM, NRBELEGTYP
FROM AVK120 WHERE ');
tq.sql.add('DATUM>=:DAT_FROM AND DATUM<:DAT_TO AND NRBELEGTYP
IN (20,21,31,40,41,241) ');
tq.sql.add('GROUP BY TYP, NRBELEGTYP, DATUM ');
tq.parambyname('DAT_FROM').asdatetime:=dfrom;
tq.parambyname('DAT_TO').asdatetime:=dto;
tq.open;
tq.FetchAll;
tq.First;
while not tq.eof do
begin
details:=TDataDetails.create(tq.FieldByName('DATUM').asdatetime,tq.fieldbyname('NRBELEGTYP').asinteger,tq.FieldByName('TYP').AsInteger,
tq.fieldbyname('UMNETTO').asfloat,tq.FieldByName('UMBRUTTO').asfloat,
tq.fieldbyname('SMENGE').asfloat,tq.FieldByName('DB').asfloat);
tmplist.Add(details);
tq.Next;
end;
finally
tq.free;
end;
cache czyszcze wylacznie dla testow
generalnie sytuacja jest taka, ze rano klent pierwszy raz odpala program
i wczytanie i pokazanie danych zajmuje 2min, kazde nastepne odpalenie to
ok 10sek, 95% czasu przypada na powyzszy kawalek kodu, z czego wiekszosc
nie na same zapytanie a na petle z tworzeniem obiektow