Come inserire una grande quantità di record nel database in breve tempo?


8

Devo inserire un gruppo di record ( 500.000 ) nel database in una sola volta, usando il modo più veloce. Ho provato a inserire 1.700 dischi contemporaneamente ma ci sono voluti venti minuti !! Sto usando SQL-SERVER, e C#.

Sebbene la seguente tabella non contribuisca alla tecnica per l'inserimento rapido, decido di collegarla comunque in modo da ottenere una migliore comprensione del numero di campi che devo inserire (duplicarlo di circa 500K ).

I campi

Risposte:


12

Esistono diverse opzioni. Ecco i principali che mi vengono in mente.

SSIS - SQL Server Integration Services: questo è lo strumento ETL di SQL Server e puoi spostare i dati da praticamente qualsiasi origine a praticamente qualsiasi destinazione e può essere abbastanza veloce.

BCP - Bulk Copy Program: questo è uno strumento da riga di comando fornito con SQL Server. È molto utile per spostare file di testo in SQL Server oppure puoi esportare in un formato nativo da un SQL Server e importare usando lo stesso formato in un altro SQL Server. BCP è anche molto veloce ma un po 'più limitato di SSIS.

INSERISCI IN tablename SELECT fieldlist FROM othertable : questo presuppone che tu stia passando da una tabella SQL a un'altra sullo stesso server. Questo è il più veloce ma a 500k righe stai osservando una transazione abbastanza grande o devi romperla come hai detto.

OPENROWSET : questa è una funzione di SQL Server che ti consentirà di estrarre i dati in una tabella da vari formati. Dovrebbe anche essere abbastanza veloce ma non ci ho lavorato molto.

Nota generale: la chiave primaria è mbr_id. Se si tratta di qualcosa che viene archiviato nei dati di origine (anziché essere una colonna di identità), l'inserimento andrà MOLTO più velocemente se i dati di origine sono nell'ordine mbr_id.


0

Dal momento che stai usando. NET, puoi effettivamente trasmettere i dati senza chiamare un processo esterno. Si utilizzerebbero i parametri con valori di tabella. Vedi la mia risposta su StackOverflow per i dettagli e un link ad un'altra variante di questo metodo:

https://stackoverflow.com/a/25815939/577765


0

Per renderlo più veloce (specialmente se si tratta di una popolazione iniziale di una tabella), vedi anche come rimuovere gli indici.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.