废话少说,先看效果。295万多条业务数据一次性插入数据库的一个表中,数据大小大约为280M,总耗时38秒。上图,

表的定义是这样的,

如果使用事务,那么时间增长到46s,也就是多了8s。我用SqlBulkCopy的InternalTransaction做的测试,

SqlBulkCopy sbc = new SqlBulkCopy(m_dal.ConnectionString, SqlBulkCopyOptions.TableLock | SqlBulkCopyOptions.UseInternalTransaction);

几点特殊说明: SqlBulkCopy只适合做Insert操作,需要Upate数据的就别尝试了。

BatchSize我没设置,默认为0, 是一次全部提交所有数据。

表有个Clustered Index。

把数据全部读取到内存的一个DataTable中(作为SqlBulkCopy的输入、数据源),比较耗费内存。可以IDataReader读取数据的方式。

测试程序和数据库在一台机器上,没有网络延时。

国外有网友做了更为详细的测试,请移步“SqlBulkCopy-Performance-1.0”。文中有几个重要的结论这里摘录一下:

Batch Size The results are quite surprising. If we use the BatchSize parameter, performance get worse and worse as we set it to lower values.

When we reach 10.000 of Batch Size, then the difference in time among the various tests becomes very small.

the best performance is obtained when we use 0 as BatchSize

TABLOCK needed to get minimal logged operations.

to get best speed BULK INSERT operations.

Clustered vs Heap it is interesting to note that the loading time of a clustered table is roughly 4 times the loading of a heap.

it is always better to first drop the index and re- create it afterwards. The gain in performance is tremendous.

python mssql bulk_SqlBulkCopy:批量插入SqlServer的利器相关推荐

  1. MySQL(一) Python操控mysql批量插入数据

    在Python中,通过pymysql模块,编写简短的脚本,即方便快捷地控制MySQL数据库 一.连接数据库 使用的函数:pymysql.connect 语法:db=pymysql.connect(ho ...

  2. MSSQL数据批量插入优化详细

    序言 现在有一个需求是将10w条数据插入到MSSQL数据库中,表结构如下,你会怎么做,你感觉插入10W条数据插入到MSSQL如下的表中需要多久呢? 或者你的批量数据是如何插入的呢?我今天就此问题做个探 ...

  3. java 高效批量插入 sqlserver 数据库

    @Testpublic void clockingIn_Img() throws Exception{DbJdbc idb = DbMaster.getIDB("JXT");Lis ...

  4. python mysql批量insert数据_使用python往mysql批量插入数据时,报错not all arguments converted...

    我用这段命令可以往mysql数据库插入数据 insert into moderation_task(id, media_id, user_id, media_url_or_path, media_ti ...

  5. python往数据库批量插入多条数据

    1.需要定义构造函数(init),给实例属性赋值(包括host.port.user.password和database) 2.连接数据库 3.插入数据,先在数据库中建好表,并且添加好所需要的字段 4. ...

  6. java sqls.add(),java 高效批量插入 sqlserver 数据库

    PHP读取Excel数据写入数据库(包含图片和文字) public function test(){ $exts = 'xlsx'; //导入PHPExcel类库,因为PHPExcel没有用命名空间, ...

  7. C#中几种数据库的大数据批量插入

    C#语言中对SqlServer.Oracle.SQLite和MySql中的数据批量插入是支持的,不过Oracle需要使用Orace.DataAccess驱动. IProvider里有一个用于实现批量插 ...

  8. 【转】几种数据库的大数据批量插入

    在之前只知道SqlServer支持数据批量插入,殊不知道Oracle.SQLite和MySql也是支持的,不过Oracle需要使用Orace.DataAccess驱动,今天就贴出几种数据库的批量插入解 ...

  9. springmvc+mybatis+ajax 批量插入数据

    2019独角兽企业重金招聘Python工程师标准>>> 批量插入.AJAX发起请求,核心代码如下: var mids = new Array(); for (var i=0; i&l ...

最新文章

  1. 机械自动化专业转 PLC 还是单片机,路会更好走一些?
  2. 论CondConv、DynamicConv、DyNet的区别与联系
  3. 财务管理的革新带动财务软件的变革
  4. 技术宝典 | ToB 业务场景下自动化测试的实践及探索
  5. python哪个代码是正确的字典_Python - 字典(dict) 详解 及 代码
  6. SpringMVC使用AOP
  7. 【数据结构与算法】之柱状图中最大矩形的求解思路和算法示例
  8. YOLOv5训练coco128数据集流程
  9. Xilinx IOdelay--Virtex-5介绍
  10. 微信小程序走出国门,国际化将指日可待?
  11. 全概公式和贝叶斯公式的理解及例题
  12. xposed微信模块源代码
  13. 获取Linux服务器公网和内网IP地址
  14. 函数计算机math,Math数学函数
  15. 你的工作有价值吗?——如何在工作最大程度地体现自己的价值?
  16. Leetcode0953. 验证外星语词典(simple)
  17. 审计署计算机中级考试blog,代码审计篇
  18. 关于龙卷风你应该知道的五件事
  19. RT-Thread学习笔记五——临界区与临界区保护
  20. 【QT学习】QRegExp类正则表达式(一文读懂)

热门文章

  1. 解决python偶尔读文件报错:UnicodeDecodeError: ‘utf-8‘ codec can‘t decode bytes in position 1022-1023: unex....
  2. pandas Dataframe/Series 设置保留小数位数
  3. ASP.NET Core2.2 和2.1 版本中对cookie的设置和存储
  4. [Swift]LeetCode478. 在圆内随机生成点 | Generate Random Point in a Circle
  5. mysql怎么设置密码都不正确的一个解决方法
  6. bzoj 1151: [CTSC2007]动物园zoo
  7. swift版的StringAttribute
  8. HDOJ 1896 Stones
  9. ASP.NET2.0快速入门--高级数据方案(3)
  10. centos sudo不能运行_Linux命令su、sudo、sudo su、sudo -i使用和区别