@lcb-User
Respekt, gut gedacht, bei mir braucht es auch für 100.000 Datensätze unter 1 Sekunde. Und der Speicherverbrauch ist nur 563 MB.
[gelöst] DBGrid bei Firebird Datenbank Abfragen bei Zeilenanzahl > 100.000 sehr langsam
-
- Lazarusforum e. V.
- Beiträge: 120
- Registriert: Mi 29. Jun 2011, 22:36
- OS, Lazarus, FPC: Lazarus 4.0 Windows 10 64Bit / Arch Linux 64Bit
- CPU-Target: 64Bit
- Wohnort: Leonberg
Re: DBGrid bei Firebird Datenbank Abfragen bei Zeilenanzahl > 100.000 sehr langsam
Hallo lcb-User,
hammer, das ist ne super Lösung! Vielen, vielen Dank!
Mit einer Zeile Code hast Du das Laufzeitproblem gelöst und die Datenbank(datei)größe auf ca. 1/4 geschrumpft. Wenn das nicht 2 Fliegen mit einer Klappe sind
.
Einen kleinen Beitrag (nach der Vorarbeit von Dir) kann ich (nach entsprechender Recherche)noch bringen:
Mit
muss man nicht auf die deutschen Umlaute in den Daten verzichten, und bleibt entsprechend schnell.
Jetzt geht es mit Lazarus in dem Projekt weiter.
Vielen Dank nochmal, auch an alle die hier mitgeholfen haben
Gruß
Euer Helios
PS: Hier noch die Version 3.0 mit der Lösung. Bei mir auch noch bis mind. 1.000.000 Zeilen verwendbar. Keine Angst, ich werde die DBA's nicht ärgern
.Bitte Plattenplatz für die lokale Datenbank sicherstellen, bei mir waren es 360MB.
Viel Spass beim Testen/Ausprobieren:
hammer, das ist ne super Lösung! Vielen, vielen Dank!
Mit einer Zeile Code hast Du das Laufzeitproblem gelöst und die Datenbank(datei)größe auf ca. 1/4 geschrumpft. Wenn das nicht 2 Fliegen mit einer Klappe sind

Einen kleinen Beitrag (nach der Vorarbeit von Dir) kann ich (nach entsprechender Recherche)noch bringen:
Mit
Code: Alles auswählen
IBConnection1.Charset := 'ISO8859_1';
Jetzt geht es mit Lazarus in dem Projekt weiter.
Vielen Dank nochmal, auch an alle die hier mitgeholfen haben
Gruß
Euer Helios
PS: Hier noch die Version 3.0 mit der Lösung. Bei mir auch noch bis mind. 1.000.000 Zeilen verwendbar. Keine Angst, ich werde die DBA's nicht ärgern


Viel Spass beim Testen/Ausprobieren:
- Dateianhänge
-
DBGridFireBirdTest.V3.0.zip
- (129.82 KiB) 110-mal heruntergeladen
- lcb-User
- Beiträge: 55
- Registriert: Di 15. Jul 2014, 13:18
- OS, Lazarus, FPC: Linux Mint 21.1 Cinnamon Lazarus 2.3.0 (rev main-2_3-3744-g967034aff5) FPC 3.3.1
- CPU-Target: 64Bit
- Wohnort: München
Re: DBGrid bei Firebird Datenbank Abfragen bei Zeilenanzahl > 100.000 sehr langsam
Hallo Helios
Freud mich das es geholfen hat
Ich hab mich für das Testprogramm zu bedanken. Das hat mein Augenmerk auf etwas ganz anderes gelenkt:
Das anlegen und löschen von temporärer Datenbank im Server - Client System.
Firebird legt wenn es keine angaben hat, wo hin es die Datei ablegen soll, in den /temp Ordner ab. Wenn man das nicht auf dem Schirm hat meint man dass alles funktioniert hat aber beim Neustart vom Server ist alles weg.
Dieses Verhalten ist aber genial wenn man nur zur Laufzeit Datenbank anlegen und kurzfristig braucht.
Für's löschen gibt's dann noch eine Funktion IBConnection1.DropDB
Hier meine Anpassungen für die die es interessiert.
Sonnige Grüße aus München
Freud mich das es geholfen hat

Ich hab mich für das Testprogramm zu bedanken. Das hat mein Augenmerk auf etwas ganz anderes gelenkt:
Das anlegen und löschen von temporärer Datenbank im Server - Client System.
Firebird legt wenn es keine angaben hat, wo hin es die Datei ablegen soll, in den /temp Ordner ab. Wenn man das nicht auf dem Schirm hat meint man dass alles funktioniert hat aber beim Neustart vom Server ist alles weg.

Dieses Verhalten ist aber genial wenn man nur zur Laufzeit Datenbank anlegen und kurzfristig braucht.
Für's löschen gibt's dann noch eine Funktion IBConnection1.DropDB
Hier meine Anpassungen für die die es interessiert.
Code: Alles auswählen
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: boolean);
begin
IBConnection1.Connected := False;
try
IBConnection1.DropDB; // DropDB wirft einen Fehler wenn IBConnection noch aktiv ist
except
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
SQLTransaction1.Active := False;
IBConnection1.Connected := False;
// Achtung Datei "TestDB.FDB" im aktuellen Verzeichnis wird gnadenlos gelöscht!!!!
// DeleteFile('TestDB.FDB');
IBConnection1.DatabaseName := 'TestDB.FDB';
IBConnection1.UserName := 'SYSDBA';
IBConnection1.Password := 'masterkey';
IBConnection1.Charset := '';
// 'ISO8859_1'; //Small character set for a small database and performent TSQLQuery. Thanks to lcb-User at www.lazarusforum.de
IBConnection1.Dialect := 3; //Nobody uses 1 or 2 anymore.
IBConnection1.Params.Add('PAGE_SIZE=8192');
IBConnection1.HostName := 'localhost';
//IBConnection1.Params.Add('PAGE_SIZE=16384');
try
IBConnection1.DropDB;
except
end;
IBConnection1.CreateDB;
IBConnection1.Transaction := SQLTransaction1;
IBConnection1.Open;
SQLTransaction1.StartTransaction;
IBConnection1.ExecuteDirect(
'CREATE TABLE messwerte (id BIGINT, system VARCHAR(240), kategorie VARCHAR(240), format VARCHAR(5), code VARCHAR(1000), langtext VARCHAR(1000), wert VARCHAR(8000), einheit VARCHAR(240))');
IBConnection1.ExecuteDirect('CREATE UNIQUE INDEX messwerte_idx1 ON messwerte(id)');
//IBConnection1.ExecuteDirect('CREATE INDEX messwerte_idx1 ON messwerte(diagnosesystem)');
//IBConnection1.ExecuteDirect('CREATE INDEX messwerte_idx2 ON messwerte(kategorie)');
//IBConnection1.ExecuteDirect('CREATE INDEX messwerte_idx3 ON messwerte(bezeichnung)');
//gstat C:\Arne\DevWork\Pascal\data\FAP\FAP.FDB -u SYSDBA -p masterkey -r
SQLTransaction1.Commit;
FillDBGrid();
end;
Sonnige Grüße aus München
Sonnige Grüße
Bibsi
Traue keiner Statistik die du nicht selbst gefälscht hast (Sir Winston Churchill 1874 - 1965)
Linux Mint 21.1 Cinnamon 5.6.7 Kernel 5.19.0-35-generic
Lazarus 2.3.0 (rev main-2_3-3744-g967034aff5) FPC 3.3.1 x86_64-linux-gtk2
Bibsi
Traue keiner Statistik die du nicht selbst gefälscht hast (Sir Winston Churchill 1874 - 1965)
Linux Mint 21.1 Cinnamon 5.6.7 Kernel 5.19.0-35-generic
Lazarus 2.3.0 (rev main-2_3-3744-g967034aff5) FPC 3.3.1 x86_64-linux-gtk2
-
- Lazarusforum e. V.
- Beiträge: 120
- Registriert: Mi 29. Jun 2011, 22:36
- OS, Lazarus, FPC: Lazarus 4.0 Windows 10 64Bit / Arch Linux 64Bit
- CPU-Target: 64Bit
- Wohnort: Leonberg
Re: DBGrid bei Firebird Datenbank Abfragen bei Zeilenanzahl > 100.000 sehr langsam
Hallo lcb-User,
auch für diesen Tipp vielen Dank. Der kommt sicher bald zur Anwendung
.
Ich bin ja noch grade am Anfang des Projekts aber die Lernkurve (Dank der Hilfe hier aus dem Forum) ist sehr steil.
Schönes Wochenende und Grüße aus Leonberg.
Helios
auch für diesen Tipp vielen Dank. Der kommt sicher bald zur Anwendung

Ich bin ja noch grade am Anfang des Projekts aber die Lernkurve (Dank der Hilfe hier aus dem Forum) ist sehr steil.
Schönes Wochenende und Grüße aus Leonberg.
Helios