我刚刚写了一些东西,在表格中插入10000行,以便进行负载测试。
每行中的数据相同且无趣。
我是这样做的:
DECLARE @i int = 0
WHILE @i < 10000 BEGIN
exec blah.CreateBasicRow ;
SET @i = @i + 1
END
所有创建基本行都是用有效的东西填充非空列。
事实证明这很慢,甚至偶尔也会挂起!我有什么选择?写一些东西生成一个长文件会更好,所有数据都用较少的插入子句重复吗?还有其他选择吗?
更新
一个约束是,它需要采用sqlcmd可以处理的形式 - 我们的数据库版本控制过程生成由sqlcmd运行的sql文件。所以我可以使用不同的形式生成包含数据的补丁文件,但我无法使用其他工具来插入数据。
答案 0 :(得分:1)
您可以通过在循环周围包装事务来加快这个确切的代码。这样,SQL Server不必在每次迭代时强化日志到磁盘(可能多次,具体取决于您在该proc中发出DML语句的频率)。
那就是说,最快的方法是一次插入所有记录。像
这样的东西insert into Target
select someComputedColumns
from Numbers n
WHERE n.ID <= 10000
对于典型情况,这应该在&lt;&lt; 1sec内执行。但它打破了使用该程序的封装。