Como inserir uma grande quantidade de registros no banco de dados em pouco tempo?

8

Eu tenho que inserir um monte de registros ( 500.000 ) no banco de dados de uma só vez, usando o caminho mais rápido. Eu tentei inserir 1.700 registros de uma só vez, mas levou vinte minutos !! Eu estou usando SQL-SERVER, e C#.

Embora a tabela a seguir não contribua para a técnica de inserção rápida, decido vinculá-la de qualquer maneira, para que você entenda melhor o número de campos que preciso inserir (duplique em cerca de 500 mil ).

Os campos

Ori Ben Ezra
fonte

Respostas:

12

Existem várias opções. Aqui estão os principais que vêm à mente.

SSIS - SQL Server Integration Services: Esta é a ferramenta ETL do SQL Servers e você pode mover dados de praticamente qualquer fonte para praticamente qualquer destino e pode ser bastante rápido.

BCP - Bulk Copy Program: Esta é uma ferramenta de linha de comando que acompanha o SQL Server. É muito bom mover arquivos de texto para o SQL Server ou você pode exportar para um formato nativo de um SQL Server e importar usando o mesmo formato para outro SQL Server. O BCP também é muito rápido, mas um pouco mais limitado que o SSIS.

INSERT IN tablename SELECT fieldlist FROM othertable : Isso pressupõe que você esteja passando de uma tabela SQL para outra no mesmo servidor. Essa é a mais rápida, mas, com 500 mil linhas, você está olhando para uma transação bastante grande ou tendo que dividi-la como disse.

OPENROWSET : Esta é uma função do SQL Server que permitirá extrair dados para uma tabela de vários formatos. Também deveria ser bastante rápido, mas não trabalhei muito com isso.

Nota geral: sua chave primária é mbr_id. Se isso é algo armazenado nos dados de origem (em vez de ser uma coluna de identidade), sua inserção será MUITO mais rápida se os dados de origem estiverem na ordem mbr_id.

Kenneth Fisher
fonte
0

Desde que você está usando. NET, você pode realmente transmitir os dados sem chamar um processo externo. Você usaria parâmetros com valor de tabela. Veja minha resposta no StackOverflow para obter detalhes e um link para outra variação desse método:

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

Solomon Rutzky
fonte
0

Para torná-lo mais rápido (especialmente se essa é uma população inicial de uma tabela), veja também sobre a remoção de índices.

Josh Simar
fonte