我目前正在构建一个脚本,我知道该脚本需要插入多行。我是用Perl来做这件事的,所以在参数化方面,单独插入每一行要容易得多。就速度而言,我猜只运行一条insert语句会更快(尽管延迟会相对较低,因为我离数据库本身很近)。我认为每次运行脚本的行数平均约为20-40行。也就是说,仅运行一条INSERT INTO语句与为每行运行一条INSERT INTO语句之间的大致性能差异是什么?注意:服务器运行的是SQL 2008。
EDITSince似乎有很多困惑,我想澄清的是,我真正想要的是SQL Server2008如何处理多行插入背后的理论。它本质上只是在内部将其转换为一堆单独的insert语句,并在一个连接上运行这些语句,还是做一些更智能的事情?
是的,我知道我可以运行定时循环。不,这不是我想要的。/EDIT
发布于 2011-07-07 04:30:36
将多个插入合并到一个命令中总是会比执行单独的插入更快地执行。原因是:
操作的机会
发布于 2011-07-07 04:30:40
一般的想法是让SQL数据库做它的事情,而不是试图将数据库视为某种类型的磁盘读取。我见过很多次,开发人员会从一个表中读取,然后再从另一个表中读取,或者执行一个通用查询,然后遍历每一行,看看这是否是他们想要的。通常,最好让SQL数据库来做它自己的事情。
在这种情况下,我看不出单行插入与多行插入有什么优势。我猜可能会有一些,因为你不需要做多次准备和提交。
实际创建一个临时数据库并尝试一下应该不会太困难。创建一个包含两列的数据库,并让程序生成数据以放入表中。给自己留出足够的时间去做。例如,此表将包含多少项?还有,你认为你一次要插入多少个?假设创建一个包含1,000,000个项的表,并在此表中一次插入1000个项,一次插入100个项,每次插入一个项。只需使用增量运算符生成数据。一次可以插入的项目数量可能有一个“甜蜜点”。
在我公正且始终正确的观点中,您可能会发现这种差异并不值得为之烦恼,您应该使用使您的代码最易于维护的方法。
我有一个编程格言:,你想优化代码的地方可能是错误的地方,。我们喜欢效率,但我们通常会攻击错误的项目。而且,无论我们在效率方面挤出了什么,我们最终都会浪费在维护上。
所以,只要编写最容易理解的程序就行了,不要担心效率过高。
发布于 2011-07-07 11:38:10
只需添加几个在插入时需要考虑的其他性能差异因素:
https://stackoverflow.com/questions/6601126
复制相似问题