2011-12-20 107 views
0

我將大約200萬條記錄插入到SQL Server 2005表中。該表當前具有聚簇以及非聚簇索引。我想改善該表中插入查詢的性能。任何人都可以有想法將大量數據插入到SQL Server 2005表中

+1

另外,你目前如何插入數據?你在使用批量插入嗎?你使用INSERT語句嗎?你一次插入一行還是一次插入多行? – 2011-12-20 12:09:01

+1

@TobyAllen:我們確實知道這是作業嗎? – 2011-12-20 12:31:51

+0

我正在使用SQL Server 2005數據庫系統。我沒有使用批量插入我正在使用insert into table_name語句,並且當前一次插入多行。 – 2011-12-20 12:48:50

回答

1

你可以嘗試在插入之後禁用索引並在之後再次啓用它們。如果您要將大量數據插入表中,它可能會是一個巨大的時間片。

看看這篇文章對如何做這樣的事情對於SQL Server:http://msdn.microsoft.com/en-us/library/ms177406.aspx

2
  1. 刪除所有索引(包括主,如果你對插入的數據 不使用相同的密鑰預序)
  2. 插入數據
  3. 重新創建所有刪除的索引
+4

如果您在談論SQL Server:我會建議**不要**放棄聚集索引!否則,在插入之前,表將轉換爲堆,然後在插入後返回到聚簇表中 - 這兩者都是極其耗費時間和資源的操作... – 2011-12-20 12:11:43

+0

是的,同意,但只有當表格中已經有大量數據時 – 2011-12-20 12:23:08

+0

刪除或禁用索引,然後再重新創建或重新構建索引會消耗更多時間。因爲該表已經包含記錄,我已經試過這個東西,但它不會使我受益 – 2011-12-20 12:45:27

1

如果您不使用批量插入沒有很好的理由,我會說,你最好Ø要做到這一點。即:選擇行格式,然後可以批量重新插入。

通過執行此數量的普通插入操作,您將對事務日誌造成巨大壓力。

如果批量插入不是一個選項,您可以通過將插入分割成塊來贏得一點 - 這樣您就不會逐行移動,但不要嘗試插入並更新它所有的一舉一舉。

我已經嘗試了一下自己,但還沒有時間去接近最終的答案。 (出於同樣的原因,我開始提問Performance for RBAR vs. set-based processing with varying transactional sizes)。

-2

您可以在一個插入中最多插入1000行。

values (a,b,c), (d,f,h) 

通過插入的主鍵對數據進行排序。

使用帶(保持鎖定)

0

你應該刪除索引,然後插入數據,然後重新創建索引。