我正在尝试在Sql Server 2008中的一个简单表中插入多行。该表没有除主键之外的任何索引。
我正在进行如下插入
insert into TestTable
(Col1,Col2, Col3,Col4, Col5)
select 1,1,1,1,GETDATE()
union all
select 1,2,3,1,GETDATE()
union all
select 1,5,2,1,GETDATE()
union all
select 1,4,15,1,GETDATE()
如果我为大量行(比如400)执行此操作并多次运行该操作, 插入操作开始花费大量时间。
有没有办法进一步优化刀片?
答案 0 :(得分:2)
insert into TestTable (Col1,Col2, Col3,Col4, Col5)
VALUES (1,1,1,1,GETDATE()), (1,1,1,1,GETDATE()), (1,1,1,1,GETDATE()), ...
答案 1 :(得分:0)
确保您经常提交。 这应该会减少回滚段的使用。
答案 2 :(得分:0)
您可以尝试将数据分块。加载前100条记录,提交,然后重复。 400条记录不是很多。您通常可以一次插入数千条记录。所有插入都将写入日志以进行回滚。提交时会清除日志文件。
答案 3 :(得分:0)
这可能是编译时间,而不是执行时间。
如果您有400行完全相同,则生成400行 first
insert into TestTable
(Col1,Col2, Col3,Col4, Col5)
select
1,1,1,1,GETDATE()
FROM
(SELECT TOP 400 * FROM master.dbo.spt_values ORDER BY 1) foo