![]() |
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:
mit ADS sehr lange dauern können.
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. */ 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 |
Re: Verständnisfrage: dBase vs. SQL
Probier mal die Range-Methode (SetRange, ...) . Diese sind auch bei ADS LocalServer optimiert.
|
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( |
Re: Verständnisfrage: dBase vs. SQL
Zitat:
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