ADO.net SqlTransaction提高了性能

use*_*190 3 c# sql-server ado.net

我正在做一些涉及将一批记录插入Sql数据库的工作.批量的大小会有所不同,但为了论证,我们可以说每5秒有5000条记录.但可能会少一些.多个进程将写入此表,没有任何内容正在从中读取.

我在快速测试中注意到的是,在整个批量插入中使用SqlTransaction似乎可以提高性能.

例如

SqlTransaction trans = Connection.BeginTransaction()
myStoredProc.Transaction = trans;
sampleData.ForEach(ExecuteNonQueryAgainstDB);
transaction.Commit();
Run Code Online (Sandbox Code Playgroud)

我对能够回滚我的更改不感兴趣所以我不会真正考虑使用事务,除非它似乎提高了性能.如果我删除此事务代码,我的插入从300ms到大约800ms!

这是什么逻辑?因为我的理解是事务仍然将数据写入数据库但锁定记录直到它被提交.我原以为这会有一个开销......

我正在寻找的是这种插入的最快方法.

Dan*_*rth 8

提交是花费时间的.如果没有显式事务,则每个查询执行一个事务.使用显式事务,不会为查询创建其他事务.因此,您有一个交易与多个交易.这就是性能改进的来源.


Adr*_*der 5

如果您正在寻找快速wqay来插入/加载数据,请查看SqlBulkCopy类