我正在使用sql事务作为APPLOCKS和其他并发机制的容器,因此我有时会创建各种隔离级别的事务,这些事务只读取数据而不写入。我相信在这些情况下,逻辑上,COMMIT和ROLLBACK具有相同的结果。
出于性能原因,我想知道服务器执行哪个更便宜/更快?是否需要针对COMMIT情况优化的不可避免的簿记以及ROLLBACK的额外开销,即使没有写入?在任何一种情况下都会释放锁。
如果没关系,那么我不必将我的.NET TransactionScope代码丢弃在一个不必要的scope.Complete()
上,这可能会让我在审查一个明显只读操作的代码时会犹豫不决。
谢谢!
答案 0 :(得分:4)
因为你没有写任何东西,所以除了关闭交易之外,你还应该选择Commit,它还会释放你可能拥有的任何锁。虽然技术上Rollback也会做同样的事情,但是Commit总是比回滚更快。