AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi TIBDataSet - Performance
Thema durchsuchen
Ansicht
Themen-Optionen

TIBDataSet - Performance

Ein Thema von Nico80 · begonnen am 8. Aug 2007 · letzter Beitrag vom 12. Aug 2007
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Nico80

Registriert seit: 28. Jun 2007
63 Beiträge
 
Delphi 2006 Enterprise
 
#1

TIBDataSet - Performance

  Alt 8. Aug 2007, 09:28
Datenbank: Interbase • Version: 7.1 • Zugriff über: IBX
Hallo an alle IBX-Experten,

habe eine Verständnisfrage.

Ich habe ein DataSet, um DS in die Datenbank einzufügen, zu aktualisieren und zu löschen.

Folgendes:

Delphi-Quellcode:
DataSet.SelectSQL.Text := 'SELECT...';
DataSet.InsertSQL.Text := 'INSERT...';
DataSet.UpdateSQL.Text := 'UPDATE...';
DataSet.DeleteSQL.Text := 'DELETE...';
Wenn ich jetzt 1000 DS einzeln aus der DB lese (also für jeden DS das DataSet neu öffne) kostet das paar Sekündchen.

Wenn ich nun die InsertSQL, UpdateSQL, DeleteSQL-Zuweisungen weglasse, habe ich beim Lesen der DS einen Performance-Gewinn um die Hälfte der Zeit.

Woran liegt das??
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: TIBDataSet - Performance

  Alt 8. Aug 2007, 09:35
Vermutlich werden irgendwelche Parsingoperationen/Parameteraufbau im Hintergrund durchgeführt.

Noch mehr Performance bekommst du diesen ganzen Automatismus wegläßt und prepared Statements verwendest.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: TIBDataSet - Performance

  Alt 8. Aug 2007, 09:54
Hallo,

das DataSet.Open ruft das SelectSQL auf.
Steht dort etwas in der Art 'Select * From Table',
wird auf dem Server die komplette Tabelle geöffnet
und "zwischengespeichert" ,
du könntest ja jetzt per while not EOF
was Lesen wollen.

Das kann je nach Grösse der Tabelle schon etwas dauern.


Heiko
Heiko
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#4

Re: TIBDataSet - Performance

  Alt 8. Aug 2007, 10:32
Sieht so aus, als ob du den Dataset-Generator nicht benützt und somit für jeden Datensatz überflüssigerweise die Insert usw. Statements extra von Hand zusammenbaust. Kein Wunder, wenn das dauert.
Gruß
Hansa
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: TIBDataSet - Performance

  Alt 8. Aug 2007, 10:52
Es spricht imho aber nichts dagegen das manuell zu machen, bzw. die automatisch erzeugten Statements per Hand zu optimieren.
Markus Kinzler
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#6

Re: TIBDataSet - Performance

  Alt 8. Aug 2007, 11:13
dafür spricht : ??

dagegen :
  • Überlistung des Servers könnte kontraproduktiv sein
  • Syntaxfehler wahrscheinlicher
  • vergessene Felder
  • Schreibfehler
  • kein Performance-Gewinn in Sicht
  • nach einem Close muss der Kram wieder neu gemacht werden
  • usw.

Normalerweise lässt man das Dataset mit Hilfe des Dataset-Generators die grundlegenden Statements (Insert, update...) erst mal erzeugen. Dem Programm sind dann die Tabellen-Felder erst mal bekannt. Und zwar alle ! Das hindert einen aber nicht flgendes zu machen :

Delphi-Quellcode:
Dataset.Close;
Dataset.SelectSQL.Text := 'SELECT ID,NR,NAME FROM TABLE1 WHERE NR < 100; // Einschränkung der Datenmenge
Dataset.Open;
while not Dataset.EOF do begin
...Bearbeitung der Daten
Next
end;
Gruß
Hansa
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: TIBDataSet - Performance

  Alt 8. Aug 2007, 11:18
Hallo Hansa,
du hast dir noch nie die automatsich erzeugten Statements angesehen oder?
Markus Kinzler
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

Re: TIBDataSet - Performance

  Alt 8. Aug 2007, 11:39
Doch, teste es doch selber.
Gruß
Hansa
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: TIBDataSet - Performance

  Alt 8. Aug 2007, 11:44
also wenn Tabellen einen Primärschlüssel haben braucht man nicht
delete from <Tabelle<>where <Feld1>= ..., <Feld2>= ... ; schreiben, da delete from <Tabelle< where <pk> = ...; reicht usw.
Markus Kinzler
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#10

Re: TIBDataSet - Performance

  Alt 8. Aug 2007, 11:55
Einfacher gehts mit :

Dataset.Delete; Sofern der SQL-Generator so was in der Art erzeugt hat :

SQL-Code:
DELETE FROM
    ART
WHERE
        ID = :OLD_ID
Wer will, schreibt so was eben von Hand in seinen Source und nimmt damit dem Dataset die Arbeit ab.
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 14:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz