sql >> Base de Datos >  >> RDS >> Sqlserver

tsql - Rendimiento de inserción por lotes

Si bien puede parecer que menos código para procesar debería brindarle una ganancia de rendimiento, usar la primera opción (unir todo) es una mala idea. Todas las declaraciones de selección deben analizarse y ejecutarse antes de que los datos se inserten en una tabla. Consumirá mucha memoria y puede tardar una eternidad en finalizar, incluso para una cantidad de datos bastante pequeña. Por otro lado, las declaraciones de inserción separadas se ejecutan "sobre la marcha".

Ejecute una prueba simple en SSMS que probará esto:cree una tabla simple con 4 campos e intente insertar 20k filas. La segunda solución se ejecutará en segundos, mientras que la primera... verás :).

Otro problema es que cuando los datos no son correctos en alguna fila (por ejemplo, el tipo no coincide), recibirá un error como Conversion failed when converting the varchar value 'x' to data type int. , pero no tendrá ninguna indicación de qué fila falló; tendrá que encontrarla usted mismo. Pero con inserciones separadas, sabrá exactamente qué inserción falló.