¿Cómo insertar una gran cantidad de registros en la base de datos en poco tiempo?

8

Tengo que insertar un montón de registros ( 500,000 ) en la base de datos a la vez, usando la forma más rápida. ¡He intentado insertar 1.700 registros a la vez, pero me llevó veinte minutos! Estoy usando SQL-SERVERy C#.

Aunque la siguiente tabla no contribuirá a la técnica de inserción rápida, decido vincularla de todos modos para que comprenda mejor el número de campos que necesito insertar (duplíquelo en alrededor de 500K ).

Los campos

Ori Ben Ezra
fuente

Respuestas:

12

Hay varias opciones Aquí están los principales que vienen a la mente.

SSIS - Servicios de integración de SQL Server: esta es la herramienta ETL de servidores SQL y puede mover datos desde casi cualquier origen a casi cualquier destino y puede ser bastante rápido.

BCP - Programa de copia masiva: esta es una herramienta de línea de comandos que viene con SQL Server. Es muy bueno para mover archivos de texto a SQL Server o puede exportar a un formato nativo desde un SQL Server e importar usando ese mismo formato a otro SQL Server. BCP también es muy rápido pero un poco más limitado que SSIS.

INSERTAR EN nombre de tabla SELECCIONAR lista de campos DESDE otra opción : Esto supone que se está moviendo de una tabla SQL a otra en el mismo servidor. Este es el más rápido, pero en 500k filas estás viendo una transacción bastante grande o tienes que dividirla como dijiste.

OPENROWSET : esta es una función de SQL Server que le permitirá extraer datos en una tabla desde varios formatos. También se supone que es bastante rápido, pero no he trabajado mucho con él.

Nota general: su clave principal es mbr_id. Si esto es algo que está almacenado en sus datos de origen (en lugar de ser una columna de identidad), su inserción será MUCHO más rápida si los datos de origen están en el orden mbr_id.

Kenneth Fisher
fuente
0

Ya que lo estás usando. NET, en realidad puede transmitir los datos sin llamar a un proceso externo. Usaría parámetros con valores de tabla. Vea mi respuesta en StackOverflow para obtener detalles y un enlace a otra variación de este método:

https://stackoverflow.com/a/25815939/577765

Solomon Rutzky
fuente
0

Para hacerlo más rápido (especialmente si se trata de una población inicial de una tabla), consulte también sobre la eliminación de índices.

Josh Simar
fuente