none
关于从datatable导入数据到SQL server中 RRS feed

  • 问题

  • 从习惯上来说个人觉得LINQ写起来方便,易懂。

    最近在网上看到过用System.Data.SqlClient.SqlBulkCopy这个类来导入听说会更快。

    有没有高手做过对比,哪个更快?几万行数据时间上会快多少,如果差不多还是觉得LINQ方便。

    谢谢!

    2013年1月31日 5:57

答案

  • 这个速度差异 还是事务原因 明白原理后自己也可以写很高效率的导入

    我们在写数据库的时候 打开和关闭事务是非常消耗资源的

    批量处理就是开启一个事务,插入1000条 后在提交一次事务,这样效率就很高了,避免每次打开关闭(虽然你没开事务,但是插入操作会自己隐式开)。

    如果是大批量的数据操作建议使用SSIS写导入脚本,不是很多或者对性能要求不高,linq足以。


    family as water

    2013年2月1日 0:55
  • 你好!

    SqlBulkCopy 速度优势非常明显,使用也简单。但他也有一个问题就是要把数据全部加载到 DataTable 中如果数据量特别大可能会造成内存溢出,这个时候建议直接使用SQL 命令 BulkInsert。


    知识改变命运,奋斗成就人生!

    2013年2月1日 1:18
    版主
  • SqlBulkCopy应该比linq to sql更快点,不过你那个数量级,应该差别不大 。

    另外:一些批量导入的方法的测试,可以参考这里

    .net 使用SqlBulkCopy极速插入数据到 SQL Server

    
    • 已标记为答案 hzpemu 2013年2月1日 7:58
    2013年2月1日 3:23

全部回复

  • 这个速度差异 还是事务原因 明白原理后自己也可以写很高效率的导入

    我们在写数据库的时候 打开和关闭事务是非常消耗资源的

    批量处理就是开启一个事务,插入1000条 后在提交一次事务,这样效率就很高了,避免每次打开关闭(虽然你没开事务,但是插入操作会自己隐式开)。

    如果是大批量的数据操作建议使用SSIS写导入脚本,不是很多或者对性能要求不高,linq足以。


    family as water

    2013年2月1日 0:55
  • 你好!

    SqlBulkCopy 速度优势非常明显,使用也简单。但他也有一个问题就是要把数据全部加载到 DataTable 中如果数据量特别大可能会造成内存溢出,这个时候建议直接使用SQL 命令 BulkInsert。


    知识改变命运,奋斗成就人生!

    2013年2月1日 1:18
    版主
  • SqlBulkCopy应该比linq to sql更快点,不过你那个数量级,应该差别不大 。

    另外:一些批量导入的方法的测试,可以参考这里

    .net 使用SqlBulkCopy极速插入数据到 SQL Server

    
    • 已标记为答案 hzpemu 2013年2月1日 7:58
    2013年2月1日 3:23