![]() |
Datenbank: MSSQL • Version: 2018 • Zugriff über: sa
wie am besten viele Daten schnell in SQL Einfügen mit Delphi
Hallo,
ich hab ein kleines Problem mit der ADO SQL Insert Geschwindigkeit. Ich habe eine Datensatz der ca. 800.000 Daten beinhaltet dieser wird via Delphi aufgearbeitet und ist in einer TObjectList<TData>. Bisher hatte ich für SQL Inserts immer eine Stored Procedure via TAdoStoredProc realisiert, aber bei dieser Datenmasse ist das zu langsam. Wenn ein Neuer Datensatz da ist werden die besehenden Daten aus der Tabelle erst gelöscht und dann die neuen Daten befüllt. Die Datenstruktur:
Delphi-Quellcode:
Die Tabelle sieht so aus:
TData = class
FID: string; FText: String; FOrt: string; FValue: Extended;
Code:
Mein Insert bisher (in der SP ist nur der eigentlicher Insert drin).
ID nvarchar(12)
Text nvarchar(255) Ort nvarchar(10) Value float
Delphi-Quellcode:
welche Möglichkeiten gib es sonst noch? TAdoTable, TAdoCommand....
For Data in ObjList do
begin ADOSP_T_SP.Active := false; ADOSP_T_SP.Parameters.ParamByName('@ID').Value := Data.FID; ADOSP_T_SP.Parameters.ParamByName('@Text').Value := Data.FText; ADOSP_T_SP.Parameters.ParamByName('@Ort').Value := Data.FOrt; ADOSP_T_SP.Parameters.ParamByName('@Value').Value := Data.FValue; ADOSP_T_SP.Active := true; end; was eignet sich am besten bei so einer Datenmenge? Edit: Server ist ein MSSQL 2017 v14.0 |
AW: wie am besten viele Daten schnell in SQL Einfügen mit Delphi
Wenn es wirklich schnell gehen soll würde ich BULK INSERT verwenden:
![]() |
AW: wie am besten viele Daten schnell in SQL Einfügen mit Delphi
Mit einem SQL-Server 2018 wird das aber schwierig werden. So einen gibts doch gar nicht. :-D
|
AW: wie am besten viele Daten schnell in SQL Einfügen mit Delphi
Zitat:
![]() |
AW: wie am besten viele Daten schnell in SQL Einfügen mit Delphi
Moin...8-)
Zitat:
PS: Nur das Insert oder auch das Laden? PS: ADO: Hängt ein Control an der Query welche die Daten lädt? Info: ![]() |
AW: wie am besten viele Daten schnell in SQL Einfügen mit Delphi
Zitat:
Zitat:
Danke für den Hinweis ich schau es mir auch mal an. Zitat:
also kleiner 10 Minuten wäre schon wünschenswert für ca 800.000 Daten nur Insert mach Probleme bei der Datenmenge bisher hatte ich noch nie den fall so viele Daten auf einmal einzufügen, beim Laden mach ich mir keine Sorgen ich hab schon öfter große Datenmengen geladen und die Zeit war angemessen. |
AW: wie am besten viele Daten schnell in SQL Einfügen mit Delphi
Die Inserts mit Datasets oder gespeicherten Prozeduren sind immer ziemlich langsam. Es kann ja immer nur ein einziger Datensatz gesendet, auf dem Server eingefügt und bestätigt werden, bevor der nächste Datensatz geschickt werden kann. Das kostet Zeit.
Die zweitschnellste Methode nach BULK INSERT / BULK COPY ist m.E., wenn du 1000, 5000 oder 10000 reine INSERT-Befehle in ein einziges Kommando packst und direkt per ADOConnection.Execute('deine 10000 Inserts...') zum Server schickst. Einfach mal ausprobieren, mit wieviel 1000 Datensätzen am Stück die besten Ergebnisse erziehlt werden. |
AW: wie am besten viele Daten schnell in SQL Einfügen mit Delphi
Okay ich habe jetzt das mit dem BulkCopy eingefügt.
Keine 10 Sekunden, Wahnsinn. Vielen Dank an Uwe Raabe und Papaschlumpf73 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:49 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-2025 by Thomas Breitkreuz