Einzelnen Beitrag anzeigen

Robert_G
(Gast)

n/a Beiträge
 
#9

Re: Geschwindigkeitsoptimierung.

  Alt 16. Mai 2004, 11:55
Moin
SELECT * FROM table WHERE ARTNR='+ed_arntnr.Text Das tut weh!

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:
  • Die Abfrage läuft beim ersten Mal nur minimal schneller als dein Schnipsel, aber beim 2. Aufrufen braucht sie massiv weniger Zeit (abhängig von der verwendeten DB und ihrem Cache-Verfahren)
  • und das gilt für alle Anmeldungen, die diese Abfrage ausführen (bei einem anderen User werden nur einmal die Berechtigungen geprüft)

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;
  Mit Zitat antworten Zitat