Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

tsql - Prestazioni di inserimento batch

Anche se può sembrare che meno codice da elaborare dovrebbe darti un aumento delle prestazioni, l'uso della prima opzione (unione tutto) è una cattiva idea. Tutte le istruzioni select devono essere analizzate ed eseguite prima che i dati vengano inseriti in una tabella. Utilizzerà molta memoria e potrebbe volerci un'eternità per terminare anche per una quantità abbastanza piccola di dati. D'altra parte, istruzioni di inserimento separate vengono eseguite "al volo".

Esegui un semplice test in SSMS che lo dimostrerà:crea una semplice tabella con 4 campi e prova a inserire 20k righe. La seconda soluzione verrà eseguita in pochi secondi, mentre la prima... vedrai :).

Un altro problema è che quando i dati non sono corretti nella riga som (ad esempio, il tipo non corrisponde), riceverai un errore come Conversion failed when converting the varchar value 'x' to data type int. , ma non avrai alcuna indicazione su quale riga non è riuscita:dovresti trovarla tu stesso. Ma con inserti separati, saprai esattamente quale inserto non è riuscito.