2011-05-06 36 views
3

我將不得不將10億個代碼插入到SQL Server數據庫表中。 我將爲此使用BULK INSERT。 我的問題是:我應該在插入數據之前還是之後創建索引?我需要最快的選項表數據庫上的索引

+0

爲什麼不基準的兩個選項與100000點的代碼? – blubb 2011-05-06 11:13:38

回答

1

之前創建索引。 BULK INSERT負責優化索引。

編輯:這似乎是唯一的,如果輸入數據是由索引排序。從http://msdn.microsoft.com/en-us/library/ms188365.aspx

ORDER({列[ASC | DESC]} [ ,... n])的

指定如何在數據 文件中的數據進行排序。如果要導入的數據 根據 聚集索引的表進行排序批量導入 性能提高,如果 任何

+1

真的嗎?事先創建索引在MsSQL服務器上是最佳的?我遇到的其他引擎證明完全相反。你有沒有關於爲什麼是這樣的信息?我對聽到內部消息非常感興趣。 – Christopher 2011-05-06 11:10:34

+0

擴大我以前的評論。如果你想將這些數據插入到Postgres中,請確保執行以下操作:1.如果該表尚不存在,則在插入操作的同一個事務中創建表(使用COPY); 2.在創建索引後數據已被插入。與插入操作相同的事務中創建表確保引擎將跳過預寫日誌。任何狀況之下;如果該表存在或不存在,您將等待插入後創建索引。 – Christopher 2011-05-06 11:16:05

+0

我以爲我在文檔中閱讀它。我只是重新檢查,似乎只適用於特殊情況:批量插入有一個「ORDER」選項,這將提高性能,如果輸入數據由索引排序。 – grimmig 2011-05-06 11:19:21

2

1十億記錄到一個表?哎喲。如果您正在處理該級別的數據量,並且您必須在論壇上提出這個問題,那麼您可能超出了您的要求。您應該在插入後創建索引,但要確保插入後統計信息在表格上更新。如果統計數據不是最新的,該指數將對您有用。

+1

「如果你正在處理這個級別的數據量,你必須在論壇上提出這個問題」的確如此。具有這些記錄數據庫的操作非常棘手,只有經驗豐富的專家才能真正掌握相關知識。如果這個人不在某個地方從事某種類型的專家的學習,那麼他幾乎是頭昏腦脹。 – HLGEM 2011-05-06 14:45:12

2

當在插入過程中表上有索引時,服務器將需要不斷重新排序/分頁表以保持索引保持最新狀態。如果刪除索引,則只需添加行而不用擔心,然後在重新創建索引時一次構建索引。

閱讀關於Bulk Insert

另請參考:

bulk insert with or without index