2009-11-09 40 views

Respuesta

6

BULK INSERT ejecuta en proceso con el motor de base de datos de SQL Server y por lo tanto evita pasar datos a través de la capa de red de la API de cliente - esto hace que sea más rápido que BCP y DTS/SSIS.

Además, con BULK INSERT, puede especificar el ORDER BY de los datos, y si esto es lo mismo que el PK de la tabla, entonces el bloqueo ocurre en un nivel de PÁGINA. Las escrituras en los registros de transacciones suceden a nivel de página en lugar de a nivel de fila también.

En el caso de INSERT regular, el bloqueo y las anotaciones del registro de transacciones están en un nivel de fila. Eso hace que BULK INSERT sea más rápido que una instrucción INSERT.

1

Por lo menos puede evitar la sobrecarga de crear y comprometer una transacción para cada registro que se inserte. Se pueden obtener otros ahorros: por ejemplo, el envío de grandes cantidades de datos a través de la red en lugar de un registro a la vez ayudará.

Entonces, quizás lo más interesante es que el implementador de DB puede (no sé si algún proveedor específico realmente lo hace) comenzar a ser inteligente: pueden mirar el conjunto de registros que se van a insertar y no reorganizar páginas de datos acomodar registros individuales puede hacer reorganizaciones masivas de las páginas para permitir nuevas inserciones, del mismo modo podemos imaginar que los índices de mezcla se podrían hacer de manera más eficiente si sabemos que estamos insertando un conjunto de registros.

0

Internamente, se convierte en un conjunto de registros OLEDB, luego carga la tabla.

No lo he pensado mucho, pero supongo que esto es más rápido cuando se ejecuta en el cuadro de SQL Server en lugar del cliente. Además, puede administrar restricciones que no puede con INSERT normal

From BOL

Cuestiones relacionadas