¿Cómo funciona BULK INSERT internamente?

¿Podría alguien explicar cómo funciona BULK INSERT internamente y por qué es mucho más rápido que las operaciones INSERT normales?

Saludos, Shishir.

BULK INSERT se ejecuta en process con el motor de database de SQL Server y, por lo tanto, evita pasar datos a través de la capa de networking de la API de cliente, lo que lo hace más rápido que BCP y DTS / SSIS.

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

En el caso de INSERT regular, las escrituras del locking y del logging de transactions están en un nivel de fila. Eso hace que BULK INSERT sea más rápido que una instrucción INSERT.

Por lo less, puede evitar la sobrecarga de crear y comprometer una transacción para cada logging que se inserte. Se pueden get otros ahorros: por ejemplo, el envío de grandes cantidades de datos a través de la networking en lugar de un logging 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 set de loggings que se van a insert y en lugar de reorganizar las páginas de datos para acomodar loggings individuales puede realizar 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 set de loggings.

Internamente, convierte a un set de loggings 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

De BOL