Sto testando la velocità di inserimento di più righe con una singola istruzione INSERT.Più righe con un singolo INSERT in SQLServer 2008
Ad esempio: INSERT INTO [MyTable] Valori (5, 'cane'), (6, 'gatto'), (3, 'pesce)
Questo è molto veloce fino a quando mi passa 50 righe su una singola affermazione, quindi la velocità diminuisce in modo significativo.
Inserendo 10000 righe con lotti di 50 occorrono 0,9 secondi. Inserimento di 10000 righe con lotti di 51 occorrono 5,7 secondi.
La mia domanda ha due parti:
- Perché c'è una tale calo le prestazioni del disco a 50?
- Posso fare affidamento su questo comportamento e codificare la mia applicazione per non inviare mai batch superiori a 50?
I miei test sono stati eseguiti in C++ e ADO.
Modifica: Sembra che il punto di partenza non sia 50 righe, ma 1000 colonne. Ottengo risultati simili con 50 righe di 20 colonne o 100 righe di 10 colonne.
Ho la sensazione che peggiori a causa dell'analisi dell'input. – Andrey
Indagine spontanea completa e totale: meno di 50 righe vengono memorizzate nella cache da SQL Server, ma gli inserti più grandi sono considerati più "importanti" e vengono immediatamente scritti sul disco? Onestamente non sono sicuro (Quindi commento piuttosto che risposta) –