MSSql Server 批量插入数据优化
2017-11-21 13:54
253 查看
针对批量入库, .Net Framework 提供了一个批量入库Class : SqlBulkCopy , 批量入库性能不错,经测试 四万左右数据 2秒入库。
以下是测试Demo , 使用外部传入事务 tran , 后续 将多个操作挂在同一个tran 上 , 便于回退。
需要注意几点:
1. 最好显示指定列映射关系,否则SqlBulkCopy 中按照顺序索引映射,意外可能发生。
2. 若连接对象通过 SqlTransaction tran = conn.BeginTransaction() 开启事务,接下来 , 基于该连接查询,或修改操作均需要关联 tran . 如 sqlCommand.Transaction = tran
3. 一个SqlCommand 关联一条Sql , 多条 Sql 创建多个Sqlcommand。
一个数据库连接开启事务后,基于该连接 数据库操作若未启用相关事务 , 报异常如图:
以下是测试Demo , 使用外部传入事务 tran , 后续 将多个操作挂在同一个tran 上 , 便于回退。
需要注意几点:
1. 最好显示指定列映射关系,否则SqlBulkCopy 中按照顺序索引映射,意外可能发生。
2. 若连接对象通过 SqlTransaction tran = conn.BeginTransaction() 开启事务,接下来 , 基于该连接查询,或修改操作均需要关联 tran . 如 sqlCommand.Transaction = tran
3. 一个SqlCommand 关联一条Sql , 多条 Sql 创建多个Sqlcommand。
LogHelper.WriteMes(LogLevel.Core, "PDES.CORE", title, string.Format("预计批量插入数据行数:{0}", lstInsert.Count)); using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn, SqlBulkCopyOptions.Default, tran)) { //入库超时时间 20 分钟 bulkCopy.BulkCopyTimeout = 20 * 60; //添加列映射 foreach (KeyValuePair<string, DataMapPairEntity> p in pair.ColumnMaps) { bulkCopy.ColumnMappings.Add(p.Value.TARGET_COLUMN_NAME, p.Value.TARGET_COLUMN_NAME); } bulkCopy.DestinationTableName = TableName; bulkCopy.WriteToServer(lstInsert.ToArray()); } LogHelper.WriteMes(LogLevel.Core, "PDES.CORE", title, string.Format("结束批量插入数据行数:{0}", lstInsert.Count));
一个数据库连接开启事务后,基于该连接 数据库操作若未启用相关事务 , 报异常如图:
![](https://images2017.cnblogs.com/blog/104935/201711/104935-20171121135202680-1177283763.png)
相关文章推荐
- JDBC批量插入数据优化,使用addBatch和executeBatch
- sqlite 插入批量数据优化
- .NET 批量插入数据,先查后插,性能优化
- MSSQL数据批量插入优化详细
- MSSQL数据批量插入优化详细
- MSSQL数据批量插入优化详细
- mysql 批量插入数据优化
- MYSQL开发性能研究之批量插入数据的优化方法
- 批量插入数据的问题和优化
- 批量插入数据优化
- MySQL 批量插入数据优化
- Android批量插入数据到sqlite的性能优化
- MSSQL数据批量插入优化详细
- 【android】 批量插入数据到sqlite的性能优化
- Postgresql 之 优化数据的批量插入
- 并发的批量插入数据的应用,app,db层面的优化
- MSSQL数据批量插入优化详细
- mysql 批量插入数据(INNODB)优化
- postgresql优化数据的批量插入
- 批量插入数据之程序优化