假设您的数据库将语法 1 视为有效(例如 MS-SQL 2008)并假设 #1 和 #2 都在本机数据库的 SQL 实现中......
然后对于你问题的表现部分......
#1 是最快的,因为它将被解析/准备一次并作为单个原子事务执行一次。
#2 将是下一个表现。有两条语句 (txn begin) 和 (txn end) 以及每个插入的一条语句。
#2a(我建议)工作得更快。根据您的服务器支持的语法,您“准备”一个参数化的 SQL 并以每个值作为参数重复调用准备好的语句(执行)。这样实际语句只被解析一次。例如
Transaction.begin();
Stmt.Prepare("insert into table1 values(:Var1, :Var2)");
Stmt.Execute('A','A1');
Stmt.Execute('B','B1');
Stmt.Execute('C','C1');
Transaction.commit();
#3 是基于 ORM 框架的,因此它会有自己的开销,并且会比 #1 和 #2a 慢。但可能比 #2 更快,具体取决于它的实现方式。在极少数情况下,#3 可能比 #1 和 #2a 都快,“如果” ORM 框架内部足够智能,可以将此类重复插入更改为特定于数据库的批量加载调用。
对于您问题的批量更新定义部分......
这基本上也是一个多部分的决定....
#A 口味的主观选择。
#B 它可以完成手头的工作吗..
我个人喜欢#2a,因为它几乎和#1 一样快,但更具可读性,并且能够处理更大的数据集,或者可以放入循环中,从流/文件等中读取值并插入它们,而 #1 有时受特定 DBMS 实现的最大 SQL 语句大小的限制。#3 和其他变体实际上取决于您使用的 ORM 框架,因此很难获得更具体的信息。
这是一个广泛的问题,所以我也保持了广泛的答案。如果有任何具体的不清楚,请发表评论,我很乐意扩展。