BCP 如何将简单的查询结果写入磁盘的速度比 SSMS 运行相同查询的速度快



运行以下命令需要10.922秒:

bcp "select * from PRMTAJ_Reporting..PINVDET 
     where pnd_date between 77500 and 77600" queryout Test.dat -S . -T -n

但是,在 SSMS 中运行完全相同的选择查询需要 28 秒。 此外,我在 bcp 命令之后在 SSMS 中运行了查询,因此 bcp 不会从我首先在 SSMS 中运行查询中受益......如果有的话,情况会反过来。

我为多个pnd_date值范围执行此操作,每次都相同。 我首先运行了 bcp 命令,然后在 SSMS 中运行了相同的选择查询,每次 SSMS 查询至少需要两倍的时间才能完成。

SSMS 仅检索结果,而 bcp 具有必须将结果写入磁盘上的新文件的额外开销。 这对我来说绝对没有意义...但我希望我能学到一些东西,使我的 SSMS 查询与这里的 bcp 一样快。 谁能解释一下?

bcp 是针对导入导出优化的实用工具,而 SSMS 是常规用途实用工具。预计 bcp 速度更快。如果它不比 SSMS 快,为什么要使用它,或者为什么Microsoft提供此实用程序。

我大致可以总结以下几点,说明为什么 bcp 更快。

  • SSMS 使用 .NET,因此与 bcp 相比,它有一些开销
  • SSMS 具有 GUI,因此 GUI 线程会消耗资源
  • 写入文件几乎总是比 SSMS 使用的 .NET 中的数据绑定网格更快。实际上写入文件的操作非常快。
  • SSMS 最有可能使用 .NET DataSet/DataTable 构造,该构造是一个具有所有开销的 xml。
  • 为单一用途(bcp 导入/导出)提供的实用工具通常比常规用途工具 SSMS 更快。

最新更新