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]