更快的SQL插入?

soo*_*ise 7 c# linq sql-server bulkinsert

我正在处理每个50k行的数据块.我正在使用LINQ将它们插入到SQL数据库中:

for(int i=0;i<50000;i++)
{
    DB.TableName.InsertOnSubmit
    (
        new TableName
        {
            Value1 = Array[i,0],
            Value2 = Array[i,1]
        }
    );
}
DB.SubmitChanges();
Run Code Online (Sandbox Code Playgroud)

这大约需要6分钟,如果可能的话,我希望它花费更少.有什么建议?

KM.*_*KM. 10

如果你正在阅读一个文件,你最好使用BULK INSERT(Transact-SQL),如果你一次从内存写入那么多(50K行),你可能最好先写一个平面文件,然后在该文件上使用批量插入.

  • aboslutely,问题是50K个人插入副一个批量插入,这是一个你根本不应该考虑使用LINQ做的任务.这个sisomething应该在一组中完成.BULK插入应该在不到一分钟的时间内解决这个问题,我曾经在旧的慢速服务器上在16分钟内批量插入2100万条记录. (4认同)
  • @Soo:正如Ian和现在Randolpho的回答所指出的那样,当你在.NET中工作时,如果你的数据不是*已经*以平面文件格式(即它只是在内存中)那么最好使用`SqlBulkCopy`而不是物理写出文件并使用原始`BULK INSERT`命令.它们都具有相同的终极效果,但是使用`SqlBulkCopy`,你直接在TDS上写入数据并切断中间人,可以这么说; 使用write-copy-insert批处理只需要一半的时间就可以完成整个过程. (2认同)