C#ADO - 单个大型SQL命令和许多单独命令之间的性能差异?

时间:2014-11-03 16:43:36

标签: c# sql sql-server-2005 ado.net

我有一些C#代码将单个记录插入(或更新)到SQL SERVER表中,如下所示:

[Open Connection]
  [Set up parameters]
  command.ExecuteNonQuery();
[Close Connection]

我现在的任务是向此代码添加批量插入,因此想知道以下内容是否足够:

[Open Connection]
  [Begin Transaction]
  [Set up parameters]
  command1.ExecuteNonQuery();
  [Set up parameters]
  command2.ExecuteNonQuery();
  [Set up parameters]
  command3.ExecuteNonQuery();
  [Set up parameters]
  command4.ExecuteNonQuery();
  .
  .
  Etc
  [Commit Transaction]
[Close Connection]

替代方案是将多个sql语句连接成一个SQL语句并在一个命令中运行,这可能会变得非常混乱?

从性能的角度来看,仅仅使用上面的多命令方法就足够了,或者建议创建单个sql语句。

单一陈述方法将非常复杂,我想权衡实施所需工作的好处(如果有的话)。

由于

1 个答案:

答案 0 :(得分:0)

评论太长了。

通常,将多个语句传递到数据库将需要更长的时间,因为在获取数据和数据库之外会产生开销。这可以通过使用不需要重新编译的参数化查询来改善,但仍然存在开销。

那就是说,你的两种方法相同。通常会在事务结束时提交单个插入/更新。因此,当您执行多个此类操作时,每个操作都会在下一次启动之前提交。如果将它们全部包装到一个语句中,则这是一个事务,并且您将永远不会有部分结果。

我认为,如果发生故障,您需要发生的事情应该引发对是否在一个声明或多个声明中执行此操作的考虑。您想要对数据进行部分更改吗?或者您希望所有更改生效,或者根本不生效? (您也可以通过打开交易来获得此功能,但这是另一回事。)