【发布时间】:2011-07-27 13:04:14
【问题描述】:
我正在运行几个具有相对庞大的结果集(300K 行)的查询,并将它们以链式方式插入到表中:
我将数据批量插入Table0,然后从Table0读取数据并批量插入Table1,从Table1读取strong> 插入 Table2 等。为了读取数据,我使用 ADO.NET 命令在后台触发 exec_sql 存储过程。
我经历了一个有趣的现象。当我重新创建数据库并在几个表上运行整个过程时,每个表大约需要 20 秒。但是,在该流程的每次后续执行中,查询只需 10 秒即可执行。在插入数据之前,表格总是被截断,因此数据量不会增长。
一开始我以为这和缓存的执行计划有关,所以我在第二次运行后使用DBCC FREEPROCCACHE清除了缓存,第三次运行仍然是10秒。
第一次执行查询时是否会发生任何其他事情,是否可以更快地找出它们(即没有实际执行查询)?
【问题讨论】:
标签: .net sql-server database tsql select