Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Verständnisfrage: dBase vs. SQL (https://www.delphipraxis.net/68803-verstaendnisfrage-dbase-vs-sql.html)

gmc616 5. Mai 2006 17:08

Datenbank: dBase • Zugriff über: ADS

Verständnisfrage: dBase vs. SQL
 
Hallo DP,

ich schreibe an einem Programm, welches auf dBase-Dateien zugreifen und hier und da ein paar Datensätze manipulieren soll.
Für den Zugriff nehme ich den ADS-Local-Server. ADS-TableType hab ich auf ttAdsCDX, da es sich um Clipper-DBF's handelt und die Indices in *.cdx-Dateien speichert sind.

Ich muß feststellen, dass bestimmt Anfragen wie z.B.
SQL-Code:
SELECT * FROM objects WHERE obj_nr <'A' ORDER BY obj_name;

/* hierbei ist OBJ_NR ein String.
Und alle Objekte die mit einem Buchstaben beginnt haben eine besondere Eigenschaft. Ist aber egal, hat nix mit meinem Problem zu tun. */
mit ADS sehr lange dauern können.

In meinem Fall kann diese SQL-Anfrage bei Tabellen mit ca. 2 Mio. DS bis zu 2 Minuten dauern.
Der Grund ist mir klar. Es liegt am fehlenden Index. Kann/darf ich aber nicht ändern. :cry:

Das dBase-DOS-Programm, dem eigendlich die die DBF gehören, kann das gleiche Ergebnis sofort anzeigen.
Wieso? :gruebel:

Arbeitet dBase intern so anders, das eine 15 Jahre alte 16Bit-Anwendung eine 32Bit-Anwendung so im Regen stehen lassen kann?
Vlt. kann mir das einer erklären. :angel2:

Grüße
gmc

Bernhard Geyer 5. Mai 2006 17:17

Re: Verständnisfrage: dBase vs. SQL
 
Probier mal die Range-Methode (SetRange, ...) . Diese sind auch bei ADS LocalServer optimiert.

s-off 5. Mai 2006 17:26

Re: Verständnisfrage: dBase vs. SQL
 
Hi,

ich habe mal einen dBaseIV-Viewer geschrieben, der ebenfalls mittels der ADS-Komponenten (8.0) von Extended Systems auf die Tabellen zugreift. Es handelt sich ebenfalls um Clipper-DBFs.

Ihc habe nun testweise folgende tabelle genommen:

Dateigröße: 1,5GB
Anzahl Felder: 22
Anzahl Datensätze: 10.076.750
kein Index

Eine SQL-Abfrage nach Schema SELECT A FROM B WHERE A=X ORDER BY A dauerte 40 Sekunden.
Auch nicht sonderlich schnell, aber schneller als Du, bei 5-facher Anzahl der Datensätze.


Darf ich fragen, welches DB-Grid Du benutzt?

Ich musste nämlich damals mit Schrecken feststellen, dass die TDBAdvGrid-Komponente von TMS eine grottige Performance hat, die ich mir bis heute nicht erklären kann :o(

gmc616 5. Mai 2006 17:59

Re: Verständnisfrage: dBase vs. SQL
 
Zitat:

Zitat von s-off
Darf ich fragen, welches DB-Grid Du benutzt?

Natürlich darfst du. :zwinker: Muß dich aber enttäuschen. In meinem speziellen Fall garkeins.

Allein die Anfrage AdsQuery.open dauer ja schon ne Ewigkeit.

Laut Delphi-Hilfe funktioniert SetRange bzw. SetStart in dBase-Dateien nur mit indizierten Feldern.
Ich habe aber leider keinen Index, den ich hierfür verwenden könnte. :cry:

Trotzdem Frage ich mich, wieso das DOS-Prog so viel schneller ist. :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz