2011-04-27 75 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