首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >运行一个插入与多个插入之间的性能差异是什么

运行一个插入与多个插入之间的性能差异是什么
EN

Stack Overflow用户
提问于 2011-07-07 02:21:43
回答 3查看 215关注 0票数 2

我目前正在构建一个脚本,我知道该脚本需要插入多行。我是用Perl来做这件事的,所以在参数化方面,单独插入每一行要容易得多。就速度而言,我猜只运行一条insert语句会更快(尽管延迟会相对较低,因为我离数据库本身很近)。我认为每次运行脚本的行数平均约为20-40行。也就是说,仅运行一条INSERT INTO语句与为每行运行一条INSERT INTO语句之间的大致性能差异是什么?注意:服务器运行的是SQL 2008。

EDITSince似乎有很多困惑,我想澄清的是,我真正想要的是SQL Server2008如何处理多行插入背后的理论。它本质上只是在内部将其转换为一堆单独的insert语句,并在一个连接上运行这些语句,还是做一些更智能的事情?

是的,我知道我可以运行定时循环。不,这不是我想要的。/EDIT

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-07 04:30:36

将多个插入合并到一个命令中总是会比执行单独的插入更快地执行。原因是:

  • 很多工作都是解析SQL完成的-对于多版本,只有一次解析工作
  • 更多的工作是完成权限检查-再说一次,只有当
  • 数据库连接“聊天”时才完成-对于多版本,握手只做一次。当使用较差的网络connection
  • Finally,多版本时,您会真正注意到此问题,从而为服务器提供了优化

操作的机会

票数 5
EN

Stack Overflow用户

发布于 2011-07-07 04:30:40

一般的想法是让SQL数据库做它的事情,而不是试图将数据库视为某种类型的磁盘读取。我见过很多次,开发人员会从一个表中读取,然后再从另一个表中读取,或者执行一个通用查询,然后遍历每一行,看看这是否是他们想要的。通常,最好让SQL数据库来做它自己的事情。

在这种情况下,我看不出单行插入与多行插入有什么优势。我猜可能会有一些,因为你不需要做多次准备和提交。

实际创建一个临时数据库并尝试一下应该不会太困难。创建一个包含两列的数据库,并让程序生成数据以放入表中。给自己留出足够的时间去做。例如,此表将包含多少项?还有,你认为你一次要插入多少个?假设创建一个包含1,000,000个项的表,并在此表中一次插入1000个项,一次插入100个项,每次插入一个项。只需使用增量运算符生成数据。一次可以插入的项目数量可能有一个“甜蜜点”。

在我公正且始终正确的观点中,您可能会发现这种差异并不值得为之烦恼,您应该使用使您的代码最易于维护的方法。

我有一个编程格言:,你想优化代码的地方可能是错误的地方,。我们喜欢效率,但我们通常会攻击错误的项目。而且,无论我们在效率方面挤出了什么,我们最终都会浪费在维护上。

所以,只要编写最容易理解的程序就行了,不要担心效率过高。

票数 3
EN

Stack Overflow用户

发布于 2011-07-07 11:38:10

只需添加几个在插入时需要考虑的其他性能差异因素:

  • Foreign键-如果要插入的表具有外键,SQL Server实际上需要在插入时联接到外键表。当您在一个查询中执行插入时,SQL server可以更有效地执行这些提交-由于您没有提到事务,因此我假设您一定是使用SQL Server自动提交模式。对于如此少的行数,创建40个事务与创建1个事务的开销可能会高于维护日志以允许回滚的开销。但是,如果要插入400000行,在一个语句/事务中插入可能比插入400000个单独的行更昂贵,因为准备回滚到400000行的成本非常高(如果要插入400000行,通常最好成批插入->最佳批大小可以通过测试确定)。此外,在超过某个行数的情况下,禁用外键、插入行,然后重新启用它们可能会更有效。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6601126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档