Hallo,
ich greife über IBDAC auf eine Firebild-Datenbank zu, die auf einem Server liegt und per
TCP angesprochen wird. Die
DB hat ca. 20.000 Datensätze. Mit den IBDAC-Kompinenten dauert ein Select und der sprung zum letzten Datensatz mehr als 16 mal länger als mit IBX, die bei Delphi 2010 im Lieferumfang sind. Wie kann das sein? Wer hat Lösungsvorschläge? So kann man damit nicht arbeiten. Hier ein Beispiel:
Folgender Code wird per Buttonklick ausgeführt und dann wird im DBGrid zum letzten Datensatz gesprungen. Auch wenn man mit
Query.Last dorthin springt, ändert sich nichts an den Zeiten.
IBDAC braucht 67 Sekunden:
Code:
Verwendet wird: TIBCQuery, TIBCConnection, TDataSource, TDBGrid
DB.Connect;
IBCQuery1.SQL.Text := 'select * from mytable;
IBCQuery1.Prepare;
IBCQuery1.Open;
IBX braucht 4 Sekunden:
Code:
Verwendet wird: TIBQuery, TIBDatabase,TDataSource, TDBGrid
IBDatabase1.Connected := true;
IBQuery1.SQL.Text := 'select * from mytable;
IBQuery1.Prepare;
IBQuery1.Open;
Der Geschwindigkeitsunterschied bleibt bestehen, auch wenn ein where an das
SQL-Statement angehängt wird. In diesem Test wurden 10.000 Datensätze zurückgegeben. Ja es müssen so viele sein. (=Alle Buchungen eines Monats).
Alle Komponenten wurde so wie sie sind aus der Komponentenpalette aufs Form gezogen. Es wurden keine weiteren Einstellung vorgenommen außer DBName + ServerIP.
Wer hat eine Idee das mit IBDAC schneller hinzubekommen? Woher kommen die drastischen Zeitunterschiede?