AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Sql-Anfrage mit WHERE langsamer als ohne trotz Index?
Thema durchsuchen
Ansicht
Themen-Optionen

Sql-Anfrage mit WHERE langsamer als ohne trotz Index?

Ein Thema von gmc616 · begonnen am 21. Mai 2005 · letzter Beitrag vom 21. Mai 2005
 
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Sql-Anfrage mit WHERE langsamer als ohne trotz Index?

  Alt 21. Mai 2005, 10:54
Zitat von gmc616:
Moin Delphianer,

ich hätte da mal einige Verständnisfragen.

Ich greife über ADS auf Clipper-dBase-Dateien zu. In meinem Fall eine adress.dbf, in der ca. 50.000 Adressen bespeichert sind. Zu dieser adress.dbf existiert eine Indexdatei adress.cdx!

Nun öffne ich die adress.dbf mit dem SQL-Befehl SELECT * FROM adress und zeige das Ergebnis in einem DBGrid an. Das Ergebnis ist in 0,nix da.

Als nächtes frage ich mit SELECT * FROM adress WHERE name <'S%' an. Das Ergebnis läst allerdings ca. 10 sec auf sich warten.

Über AdsQuery.IndexDefs.Items[i].FieldExpression habe ich festgestellt, dass unter anderem auch ein Index über 'name' existiert. Das zeigt doch auch, das die Indices geladen werden.

Nun sollte man doch meinen, dass die Anfrage über die Where-Clausel mindestens genauso schnell ist als ohne, jedenfalls keine 10 sec dauert?

Werden die Indices überhaupt benutzt? Kann man überprüfen ob die Indices auch wirklich greifen?

Meine Erfahrungen mit anderen DBs haben mich gelehrt, dass (in den meisten Fällen); je mehr man das Result mittels WHERE-Clauseln einschränkt, desto schnell kommt das Ergebnis zurück.
Das stimmt doch? (für die meisten Fälle)

Ähnliche Sorgen habe ich auch mit AdsQuery.Locate.
Frage ich die DB mit ersterem SQL-Befehl an und möchte nur zu einem Namen springen der z.b. mit 'W' beginnt, dauert es wieder ca. 10 sec bis der Datensatz gefunden wurde.

Werden auch beim Locate die Indices benutz? Wieso dauert das so lange?
Was macht das Locate genau? Durchsucht es den Speicher oder die DB?

Selbst wenn ich vor dem Locate-Aufruf den AdsQuery.IndexNamen auf meinen Index über 'Name' lege, ändert sich nichts an der Performance.

Das das Anzeigen von 50.000 Adressen in einem Fenster nicht grade sinnvoll ist weiß ich selbst, allerdings ist mein Chef davon nicht weg zubekommen.

Bin ich hoffnungslos verloren oder gibt es doch noch Möglichkeiten um die Sache zu beschleunigen?

Gruß
gmc

[edit=r_kerber]Einige Delphi- durch SQL-Tags ersetzt. Mfg, r_kerber[/edit]
Hi,

Du erzählst uns wahrscheinlich nicht wirklich alles. Ich habe hier eine Adressentabelle im DBF Format mit knapp 600.000 Einträgen. Und hier sind meine Ergebnisse:

Select * from adress where name < 'S%' -> zwischen 47ms und 120ms
Select count(*) from adress where name < '%S' -> zwischen 46ms und 98ms (418000 Treffer)

Hast Du vielleicht die Datenbankverbindung geschlossen? Der allererste Aufruf nach dem Öffnen kann tatsächlich lange dauern. Aber wenn eine Tabelle einmal gecached wurde, geht das blitzschnell. Und noch weitere Fragen:
  • Welche ADS-Version verwendest Du
  • Wie greifst Du auf die Tabelle zu (Direkt oder AdsConnection)
  • Wie sind die Indexausdrücke genau aufgebaut
  • Verwendest Du ADSSettings, und wenn ja welche
  • Befindet sich eine grosse Anzahl von Deleted-Records in der Tabelle
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:49 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-2025 by Thomas Breitkreuz