【发布时间】:2014-01-10 02:51:21
【问题描述】:
运行以下命令花费了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 中运行了查询,因此我首先在 SSMS 中运行查询并不会使 bcp 受益……如果有的话,情况正好相反。
我对 pnd_date 值的多个范围执行此操作,并且每次都是相同的。我先运行 bcp 命令,然后在 SSMS 中运行相同的选择查询,每次 SSMS 查询至少花费两倍的时间才能完成。
SSMS 仅检索结果,而 bcp 具有将结果写入磁盘上的新文件的额外开销。这对我来说绝对是零意义......但我希望我能学到一些东西,让我的 SSMS 查询和 bcp 一样快。谁能解释一下?
【问题讨论】:
-
您是否重新计算了统计数据并检查了来自 SSMS 的查询计划?
-
@PieterGeerkens 索引在运行之前已重建...我的理解是这也会更新统计信息。查询计划显示聚集索引扫描...... pnd_date 上有一个索引,但据我了解,在这么多记录上使用非聚集索引上的书签查找效率不高。只是为了好玩,我尝试将 pnd_date 设为聚集索引以查看它的执行方式,并且它的执行方式更像 bcp 命令。当然,它不是生产中的聚集索引,所以这没有帮助。
标签: sql-server-2008 ssms bcp