2010-09-24 13 views
6

Devo trovare il modo migliore per inserire o aggiornare i dati nel database utilizzando sql server e asp.net. È uno scenario standard se i dati esistono vengono aggiornati se non vengono inseriti. So che ci sono molti argomenti qui a riguardo, ma nessuno ha risposto a ciò che ho bisogno di sapere.Inserimento/aggiornamento bulk del server SQL in MERGE nello scenario di inserimento o aggiornamento

Quindi il mio problema è che non c'è davvero alcun problema quando si aggiorna/inserisce 5k - 10k righe ma cosa con 50k e altro.

La mia prima idea era di usare il comando MERGE del server SQL 2008, ma ho qualche considerazione sulle prestazioni se saranno 50k + righe. Inoltre non so se posso marge i dati in questo modo basandomi non sulla chiave id primaria (int) ma su un'altra chiave univoca nella tabella. (per essere precisi un numero di serie del prodotto che non cambierà nel tempo).

La mia seconda idea era di ottenere prima tutti i periodici di prodotto, quindi confrontare i nuovi periodici di dati con quello e dividerli in dati da inserire e dati da aggiornare, quindi creare solo un inserto di massa e un aggiornamento di massa.

Solo non so quale sarà il migliore, con MERGE non so quale sarà la prestazione e sarà supportato solo da SQL Server 2008, ma sembra abbastanza semplice, la seconda opzione non ha bisogno sql 2008, i batch dovrebbero essere veloci ma selezionando prima tutti i serial e dividendo in base ad essi potrebbero esserci delle penalità prestazionali.

Qual è la tua opinione, cosa scegliere?

+0

Stai decidendo di eseguire l'aggiornamento al 2008 o stai distribuendo un'applicazione che potrebbe dover essere eseguita su più versioni di SQL Server? Perché se lo hai già, dovresti essere in grado di testare Merge per le prestazioni. – JeffO

+0

Yeh, dovrò aggiornare per usare marge, non è un problema, ma se Marge è peggio nelle prestazioni, allora non so se ne vale la pena. – Programista

risposta

4

Merge performace modo migliore, perché "Uno dei più importante vantaggio di MERGE è tutti i dati vengono letti ed elaborati solo una volta"

Non avete bisogno di una chiave primaria, è possibile partecipare a uno o più campi che cosa rende i tuoi record univoci

+0

Non capisco. –

+0

parte della strega che non si ottiene? – Ivo

+0

Non è possibile eseguire l'unione in blocco. Come può essere "molto meglio" nell'inserimento di massa e nel contesto di aggiornamento? –

2

Non ci dovrebbero essere problemi nell'effettuare l'unione sul numero di serie come lo hai descritto. Si consiglia di leggere Optimizing MERGE Statement Performance per le migliori pratiche consigliate da Microsoft quando si utilizza MERGE.

Problemi correlati