首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么批量导入比一堆插入更快?

为什么批量导入比一堆插入更快?
EN

Stack Overflow用户
提问于 2017-05-18 15:20:37
回答 3查看 26.6K关注 0票数 9

我正在写我的研究生工作,内容是关于从文件导入数据到SQL Server表的方法。我已经创建了自己的程序,现在我正在比较它与一些标准方法,如bcp,批量插入,插入...SELECT * FROM OPENROWSET(BULK...)我的程序从源文件中读入行,解析它们,然后使用普通的插入逐个导入它们。该文件包含100万行,每行4列。现在我遇到了这样的情况,我的程序需要160秒,而标准方法需要5-10秒。

所以问题是为什么批量操作更快?他们用的是特殊的手段还是什么?你能给我解释一下或者给我一些有用的链接吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-18 15:32:28

BULK INSERT可以是日志记录最少的操作(取决于各种参数,如索引、表的约束、数据库的恢复模型等)。最低限度记录的操作只记录分配和释放。在大容量插入的情况下,仅记录区分配,而不记录所插入的实际数据。这将提供比INSERT更好的性能。

Compare Bulk Insert vs Insert

实际的好处是减少了记录在事务日志中的数据量。

在使用大容量日志或简单恢复模式的情况下,这种优势非常明显。

Optimizing BULK Import Performance

您还应该考虑阅读这个答案:Insert into table select * from table vs bulk insert

顺便说一下,有一些因素会影响大容量插入的性能:

表是否具有约束和/或触发器。

数据库使用的恢复模式。

要复制数据的表是否为空。

表是否有索引。

是否指定了TABLOCK。

是从单个客户端复制数据还是从多个客户端并行复制数据。

是否在运行SQL Server的两台计算机之间复制数据。

票数 11
EN

Stack Overflow用户

发布于 2017-05-18 15:31:13

我想你可以找到很多关于它的文章,只要搜索“为什么大容量插入更快”。例如,这似乎是一个很好的分析:

https://www.simple-talk.com/sql/performance/comparing-multiple-rows-insert-vs-single-row-insert-with-three-data-load-methods/

通常,任何数据库对于一次插入都有大量的工作:检查约束、建立索引、刷新到磁盘。当在一个操作中执行多个操作时,数据库可以优化这种复杂的操作,而不是逐个调用引擎。

票数 0
EN

Stack Overflow用户

发布于 2017-05-18 15:39:41

首先,逐行插入不是最优的。有关将数据加载到SQL Server的最快方法,请参阅this article on set logic和this article

其次,大容量导入针对大负载进行了优化。这一切都与页面刷新、写入日志、索引和SQL Server中的其他各种事情有关。technet有一篇关于如何优化批量插入的文章,这篇文章揭示了批量是如何更快的。但我不能链接超过两次,所以你将不得不谷歌“优化批量导入性能”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44041143

复制
相关文章

相似问题

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