2011-04-27 78 views
2

我试图插入多个行到Sql Server 2008中的一个简单的表。该表除了主键以外没有任何索引。Sql Server插入超时

我做的插入如下

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

什么是你想实现什么? – 2011-04-27 01:54:54

+0

运行400 UNION's肯定会让它变慢 - 尽管我不确定“巨大”的时间意味着什么。这不是将400条记录插入表格的正确方法。 – 2011-04-27 01:54:55

回答

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()), ... 
0

您可以尝试分块数据。加载前100条记录,提交,然后重复。 400条记录不是很多。您通常可以一次插入数千条记录。所有插入都写入日志以进行回滚。提交时会清除日志文件。

0

这可能是编译时间,而不是执行时间。

如果你有400行完全一样,然后生成400行第一

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 
+0

对不起,我意识到我的问题不是很准确 - 我实际上并没有试图插入相同的行。 – SealKiller 2011-05-05 17:27:10