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

本文关键字:命令 之间 性能 许多单 单个大 SQL C#ADO- | 更新日期: 2023-09-27 18:29:08

我有一些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语句。

单语句方法将非常复杂,我想权衡一下实现所需努力的好处(如果有的话)。

感谢

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

这对于注释来说太长了。

一般来说,将多个语句传递到数据库中需要更长的时间,因为从数据库中获取数据和输出数据会产生开销。这可以通过使用不需要重新编译的参数化查询来改善,但仍有开销。

也就是说,你的两种方法是而不是相同的。单个插入/更新通常会在事务结束时提交。因此,当您执行多个这样的操作时,每个操作都会在下一个操作开始之前提交。如果将它们全部封装到一个语句中,那么这就是一个事务,永远不会得到部分结果。

我认为,在失败的情况下,你需要做的事情应该促使你考虑是在一个声明中还是在多个声明中这样做。是否要对数据进行部分更改?还是希望所有更改都生效,或者根本不生效?(您也可以通过打开事务来获得此功能,但这是另一回事。)