![]() |
Geschwindigkeitsoptimierung.
Hallo,
ich stehe heute vor einem ernst zu nehmenden problem mit der Geschwindigkeit meiner Anwendung. UNd zwar geht es um Datenbankabfragen. Ich habe eine Tabelle mit recht vielen daten (also 1000-5000). Und die tabelle soll jetzt nach einem wert durchsucht werden. Dies soll möglichst schnell gehen. Ich kenne da schon 3 möglichkeiten. und bei 2 bin ich mir mit der geschwindigkeit nicht sicher... beide laufen irgendwie gleich langsam, obwohl ich von unterscheidlichen quellen gehört habe, dass es eigentlich schneller klappen sollte. ok. zu den fällen: 1.
Delphi-Quellcode:
2.
for i:=1 to dmData.ibTable.RecordCount do
begin bonsai; dmData.ibTable.NExt; //geht also alle datensätze durch, bis der gesuchte wert gefunden wurde.... end;
Delphi-Quellcode:
3.
dmData.ibTable.Locate('ARTNR', ed_artnr.Text, [loCaseinsensitive]);
SQL-Code:
wie ihr seht, kann man die 1. methode gleich vergessen.
SELECT * FROM table WHERE ARTNR='+ed_arntnr.Text
wie bastle ich diese funktion am schnellsten? bei mir ist es so, dass man ca 0,5 sekungen warten muss bis ein wert von 3000 anderen gefunden wurde... das ist sehr lahm...!!!! wäre sehr dankbar für anregungen... :-) |
Re: Geschwindigkeitsoptimierung.
Hi,
wenn du z.B. nach der Artikelnummer suchst solltest du deine Tabellen so aufbauen, dass die Artikelnummern einmalig und indiziert sind. Dann sollte ein Zugriff auch mittels locate ok sein. |
Re: Geschwindigkeitsoptimierung.
hallo mo...,
hast du die tablle indiziert? |
Re: Geschwindigkeitsoptimierung.
jetzt hab ich sie indiziert.... :oops:
ist jetzt etwas schneller... ist aber immer noch nicht sooo doll... naja... der code ist auch etwas komplizierter.. ich werd mal gucken wo ich noch indizierung vergessen hab. wie kann ich die bearbeitungsdauer feststellen? dass ich z.b. nach einem click angezeigt bekomme, wie lange die operation gebraucht hat. |
DP-Maintenance
Dieses Thema wurde von "Luckie" von "VCL-Komponenten und Controls" nach "Datenbanken" verschoben.
Du sagst selbst, dass es eine Datenbankfrage sei... :roll: |
Re: Geschwindigkeitsoptimierung.
Zitat:
![]()
Delphi-Quellcode:
mfG
var
A, B: Cardinal; begin A := GetTickCount; // tue etwas B := GetTickCount - A; ShowMessage(IntToStr(B)); end; mirage228 |
Re: Geschwindigkeitsoptimierung.
yeah danke mahn! :bounce2:
|
Re: Geschwindigkeitsoptimierung.
noch eine frage zur indizierung..... wie mach ich das???????
immer wenn ich die felder unter IndexDefs eingebe, verschwinden sie wieder gleich... muss ich es etwa über interbase machen? danke. |
Re: Geschwindigkeitsoptimierung.
Moin :hi:
SQL-Code:
Das tut weh! ;)
SELECT * FROM table WHERE ARTNR='+ed_arntnr.Text
Du änderst jedesmal den Wortlaut des Statements, der Server kann es deshalb nicht mehr zu einem früheren Aufruf zuordnen. Er muss also den Code neu parsen, die Berechtigungen prüfen, einen Query Plan erstellen, die Werte holen. Machst du es so wie im Schnipsel unten wirst du etwas feststellen:
Delphi-Quellcode:
With ADOQuery Do
Begin SQL.Text := 'SELECT *' + #10 + 'FROM Table' + #10 + 'WHERE ARTNR = :i_Ed_ArntNr'; // Parsen des Statements um Query Parameter zu finden... Prepared := True; // Werte an Query Parameter übergeben... Parameters.ParamByName('i_Ed_ArntNr').Value := Ed_ArntNr.Text; Open; // Laufe durch die Ergebnisse bis zum letzten Eintrag (Eof)... While not Eof Do Begin //Was immer du hier machen willst... //mit "Next" springst du zum nächsten Eintrag... Next; End; //... End; |
Re: Geschwindigkeitsoptimierung.
bestätigung.... das geht über interbase... :lol:
die dauer beträgt aber dennoch ca 800 ms...... (p4 2,8ghz!) das ist gar nicht guttah! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:38 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