为什么BCP速度如此之快?

4

BCP用于将数据插入SQL Server数据库,速度非常快。那么它是如何做到如此高效的呢?

4个回答

11

在SQL Server中,与传统的插入语句相比,BCP输入的日志记录方式非常不同。 SQL如何处理事务取决于许多因素,其中一些是大多数开发人员甚至不考虑的,比如数据库使用的恢复模式。

bcp使用与BULK INSERT和SqlBulkCopy类相同的工具。

更多详细信息请参见http://msdn.microsoft.com/en-us/library/ms188365.aspx

重要的是,这些批量操作记录的数据比普通操作少,并且可以指示SQL Server忽略其对传入数据的传统检查和平衡。 所有这些因素都有助于提高速度。


有趣。我猜如果我使用SQLBulkCopy类,那么我会得到相同类型的功能...这可能是我要走的路线。 - Tom Jones

8

它作弊了。

它有对内部的深入了解,能够更直接地将您的输入数据映射到这些内部。它可以跳过其他繁重的操作(如解析、优化、事务处理、日志记录、延迟索引、隔离)。它可以做出适用于每一行数据的假设,而普通的插入SQL语句则不能。

基本上,它能够跳过大量使数据库成为数据库的功能,然后在最后集中清理自己。


3
只想补充一下,除非你告诉它不要跳过,否则它还会跳过表上的任何触发器。 - HLGEM

3
我知道bcp和普通插入的主要区别在于,bcp不需要为每个单独的事务保留单独的事务日志条目。

那么,在我进行普通插入操作时,有没有办法关闭这个日志记录呢? - Tom Jones
@Tom,虽然有解决方法,但尝试这样做是一个极其糟糕的想法。 - Joel Coehoorn

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接