Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

tsql - Desempenho de inserção em lote


Embora possa parecer que menos código para processar deveria lhe dar um ganho de desempenho, usar a primeira opção (união tudo) é uma má idéia. Todas as instruções select devem ser analisadas e executadas antes que os dados sejam inseridos em uma tabela. Ele consumirá muita memória e pode levar uma eternidade para terminar, mesmo para uma quantidade relativamente pequena de dados. Por outro lado, instruções de inserção separadas são executadas "on the fly".

Execute um teste simples no SSMS que provará isso:crie uma tabela simples com 4 campos e tente inserir 20k linhas. A segunda solução será executada em segundos, enquanto a primeira... você verá :).

Outro problema é que quando os dados não estão corretos na linha som (tipo incompatível, por exemplo), você receberá um erro como Conversion failed when converting the varchar value 'x' to data type int. , mas você não terá indicação de qual linha falhou - você teria que encontrá-la por conta própria. Mas com inserções separadas, você saberá exatamente qual inserção falhou.