C# 我的SQL事务是否花费的时间太长?

C# 我的SQL事务是否花费的时间太长?,c#,sql-server,transactions,C#,Sql Server,Transactions,我的申请有点让我担心。我有一个SQL查询,它跨多个表向数据库中插入大量内容。我计算了完成这个过程需要多长时间,大约需要1.5秒。在这一点上,我甚至还没有完成查询的开发,我仍然需要编写更多的插入程序。因此,我完全预计这一过程将花费更长的时间,可能长达3秒 现在,重要的是,所有这些数据保持一致,要么完全完成,要么根本不完成。所以我想知道的是,一笔交易花那么长的时间可以吗。它不会锁定表,所以选择、插入、更新等。。。在事务完成之前无法运行?我担心的是,如果频繁运行此查询,可能会锁定整个应用程序,从而使其

我的申请有点让我担心。我有一个SQL查询,它跨多个表向数据库中插入大量内容。我计算了完成这个过程需要多长时间,大约需要1.5秒。在这一点上,我甚至还没有完成查询的开发,我仍然需要编写更多的插入程序。因此,我完全预计这一过程将花费更长的时间,可能长达3秒

现在,重要的是,所有这些数据保持一致,要么完全完成,要么根本不完成。所以我想知道的是,一笔交易花那么长的时间可以吗。它不会锁定表,所以选择、插入、更新等。。。在事务完成之前无法运行?我担心的是,如果频繁运行此查询,可能会锁定整个应用程序,从而使其某些部分变得异常缓慢或无法使用。由于用户基数较低,我怀疑这是否会成为一个问题,但如果我的应用程序能够获得一些吸引力,那么这个查询可能会非常多

我是否应该关心这个问题,或者我是否遗漏了一些数据库无法反映我想法的地方。我使用的是SQL Server 2014数据库


注意,我在事务开始之前立即使用StopWatch C#对象来计时,并在提交更改后立即停止它。因此,它尽可能准确。

我认为这取决于您的代码、如何有效地使用循环、选择查询和其他语句。

您关注这一点是正确的,因为事务将锁定其写入的行,直到事务提交,这肯定会导致死锁等问题,以及会减慢系统响应的临时阻塞。但有多种因素决定了潜在影响。
例如,如果您的用户只更新和查询他们自己的数据,并且您的表具有支持读写查询条件的索引,那么您可能基本上不需要担心。这样,每个用户的行锁定在很大程度上不会影响其他用户——当然这取决于您编写代码的方式。
如果您的用户共享数据,并且您希望能够支持跨多个用户数据的高效搜索(例如,即使有多个并发更新),那么您可能需要做更多的工作

一些一般概念:
--确保事务以相同的顺序写入表
--通过在开始交易前尽可能多地准备要写入的数据,使交易尽可能短。
——如果这是一个新系统(即使不是新系统),则一定要考虑在数据库上启用快照隔离和/或读提交快照隔离。SI将(在会话上显式设置时)允许您的读取查询不会被并发写入阻止。默认情况下,RCSI将允许您的所有读取查询不会被并发写入阻止。但是,阅读本文可以了解这两种隔离级别的优点和局限性: