Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Viele Datensätze nacheinander erstellen (https://www.delphipraxis.net/107095-viele-datensaetze-nacheinander-erstellen.html)

Union 24. Jan 2008 10:34

Re: Viele Datensätze nacheinander erstellen
 
Noch etwas zur Performance und Sicherheit: Der Zugriff über persistente (oder zur Laufzeit erstellze) Feldobjekte ist ca. 3x so schnell wie der Zugriff über FieldByName. Und bei persistenten Feldern kann man sich auch nicht mehr vertippen.

Jelly 24. Jan 2008 11:18

Re: Viele Datensätze nacheinander erstellen
 
Also der SQL Server ist dafür bekannt, sehr schnell so viel wie möglich Speicher für sich in Anspruch zu nehmen. Das mit den 300MB kann also durchaus sein.

Es muss aber gewusst sein, dass ein Insert in eine Tabelle wo bereits viiiiiile Datensätze vorhanden sind, langsamer ist als in eine leere Tabelle einzufügen. Hier mal einige Tipps, an welchen Ecken man schrauben kann:
  • Liegen einige Indizes auf der Tabelle, so kanns z.B. von grossem Vorteil sein, dies erst mal wieder zu entfernen, und nach dem Einfügen der DS wie neu zu erstellen.
  • Auch bietet der SQL Server einen BulkInsert Mechanismus an. Such mal in der T-SQL Hilfe nach Bulk Insert.
  • Es wird auch schon helfen, anstatt über eine Table Komponente zu gehen direkt den SQL Insert Befehl in einer Query Komponente zu formulieren, und diesen dann mit ExecSQL auszuführen. Das erspart den Overhead lokal im Dataset.
  • Du könntest auch ein insert into SQL Befehl nutzen. Warum musst du lokal iterieren, oder ist eine der beiden Tabellen nicht aus einem MSSQL Server
[*]Eventuell ist eine Stored Procedure hilfreich. Du kannst auch intern im SQL Server mit temporären Tabellen arbeiten, die dann nur im Speicher vorliegen. Ein Insert into aus dieser temporären Tabelle sollte wesentlich schneller sein, als im Delphi als zu durchlaufen, und jeden Insert einzeln aufzurufen.[/list]

stifflersmom 24. Jan 2008 12:38

Re: Viele Datensätze nacheinander erstellen
 
Wieso editierst Du eigentlich jeden Datensatz immer wieder,
statt nur den Counter für Veränderungen hochzuzählen?

Moin

Reinhardtinho 24. Jan 2008 12:50

Re: Viele Datensätze nacheinander erstellen
 
Hi,

@Jelly:
Danke für die zahlreichen Tipps, ich werde sie heute abend oder morgen ausprobieren.

@stifflersmom:
Den Datensatz editiere ich immer, weil sich an den ID3Tags oder an der Größe etwas geändert haben könnte.
Ich beginne mit einer leeren Datenbank und da tritt das Problem ja schon auf, es wird also immer nur Append aufgerufen.


MFG
Lorenz

RWarnecke 24. Jan 2008 18:20

Re: Viele Datensätze nacheinander erstellen
 
Mein Vorschlag zu dem Thema wäre, es über ein Query zu machen. Ich erstelle meinetwegen in einer StringList oder in einem Memo alle INSERT-Befehle oder UPDATE-Befehle und gebe dann das Memo oder die StringList in die Query und führe die aus. Sende dann noch ein COMMIT und die Datensätze sind in der Tabelle. Bei meiner Firebird - Datenbank habe ich ca. 7000 Datensätze in 120 Sekunden mit der Methode eingefügt.

Edit:
Ich denke beim SQL Server 2000 funktioniert das genau so schnell.

mquadrat 25. Jan 2008 09:41

Re: Viele Datensätze nacheinander erstellen
 
Ich würde das prüfen, ob es den Datensatz schon gibt und das Einfügen bzw. ändern über eine Stored Procedure machen. Dazu sämtliche Aufrufe in einer Transaction. Ein Beispiel findest du hier.

Das muss allerdings dein Geschwindigkeitsproblem nicht lösen. Ich sehe ein weiteres Problem beim RAM. Ist das voll muss der Rechner die ganze Zeit hin und her pagen. Also ggf. einfach mal auf nem Rechner mit mehr RAM ausprobieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:51 Uhr.
Seite 2 von 2     12   

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