2010-05-25 7 views
7

Ho un 5-6 tabelle nel mio database che ho bisogno di compilare con i dati di test per testare la peroformance nella mia app.Qual è il modo più rapido per importare record da 60 m in SQL

Posso scrivere un codice e fare un inserimento di massa la mia previsione è che ci vorranno quasi 3 giorni per l'esecuzione, quindi ho pensato che ci deve essere un modo più veloce.

Qualche idea?

+0

Dolce Gesù, 3 giorni di Sql INSERTI ... puoi immaginare se dovessi alimentare questo tramite un'interfaccia web attraverso un caricamento di file (ad esempio PhpMyAdmin, SQL-Web-Admin) ... buona fortuna. – Dal

+2

Non utilizzare mai un linguaggio dell'applicazione per eseguire il lavoro di un database e non avere mai un database che faccia il lavoro di una lingua dell'applicazione, e questo è il lavoro di un database. –

risposta

1

SSIS è un modo per andare, ma o si sta utilizzando l'attività di inserimento in blocco, o in loop attraverso il file e chiamando un'istruzione INSERT INTO. C'è BCP disponibile.

+0

Lo stavo considerando. BCP è molto più veloce? – Jon

+0

BCP non è più veloce di BULK INSERT. Vedere questo link: http://msdn.microsoft.com/en-us/library/aa178096(SQL.80).aspx –

+0

Grazie, strano ho sempre pensato che BCP fosse più veloce – Jon

3

A seconda di come si generano i dati, SSIS potrebbe essere il modo migliore per inserire i dati.

Inoltre, assicurarsi di disattivare tutti i trigger, ove possibile, e rimuovere il maggior numero possibile di indici, aggiungendoli nuovamente in seguito.

0

Usa recursive CTEs per generare ed inserire enormi quantità di righe alla volta:

with table1Test 
as (
-- 
-- generate some test rows 
-- 
) 
insert into table1 select ... from table1Test 
1

BCP è molto molto veloce, e non è così difficile da usare, anche è possibile eseguire semplicemente e rapidamente da un file batch successivamente.

SSIS, è super, è possibile creare script con ramificazioni e alberi decisionali.

Per una situazione una tantum, la velocità sarà simile in entrambi.

Sarai scioccato dal fatto che sia in grado di gestire 60 milioni. Con un file batch BCP pulito, è possibile importare, - useremo quindi SQL per modificare, esportare i nuovi dati e creare diversi set di dati di test. Tutto funzionerà in pochi secondi o minuti.

Ricordare inoltre, se è necessario specificare un file di formato per bcp, un modo per farlo è digitare due record nella tabella, quindi esportare bcp da quella tabella, consentendo a bcp di generare un file fmt. Ora hai il file, puoi importarlo usandolo.

Good Luck,

Mark Breen Irlanda BMW R80GS 1987

0

si potrebbe avere uno sguardo ai strumenti Redgate, hanno uno chiamato generatore di dati. Potrebbe aiutarti a scrivere i tuoi script e sono sicuro che li hanno ottimizzati in qualche modo per la velocità degli inserti.

(Disclaimer, non sono associato a redgate, proprio come il software).

1

È possibile risparmiare tempo significativo quando si inseriscono tonnellate di dati disattivando anticipatamente gli indici e riabilitandoli al termine. Mentre viene aggiunta ogni riga, è necessario riequilibrare costantemente l'indice, talvolta dividere le pagine, ecc. È meglio saltare una manciata di manipolazioni ripetitive e lasciare che esegua il lavoro una volta terminato l'inserimento.

Se sei coraggioso e sei sicuro che i dati siano corretti, potresti anche eliminare qualsiasi relazione con le chiavi esterne e riaggiungerli al completamento. In caso contrario, eseguirà una ricerca per verificare la validità di ciascun valore FK in ciascuna riga inserita. Lo stesso vale per altri vincoli.