2008-12-08 25 views
7

在評論批量插入我讀帶或不帶指數

正如一個側面說明,它有時快放棄你的表的索引和大容量插入操作後重新創建。

這是真的嗎?在哪些情況下?

回答

7

和喬爾一樣,我會迴應聲明:是的,它可以是真實的。我發現識別他所提到的場景的關鍵在於數據的分佈,以及您在特定表上的索引大小。

在我用來支持的應用程序中,執行了180萬行的正常批量導入,其中包含4個索引,1個包含11列,表中共有90列。帶索引的導入需要20多個小時才能完成。刪除索引,插入和重新創建索引只需要1小時25分鐘。

所以它可以是一個很大的幫助,但很多都歸結於你的數據,索引和數據值的分佈。

6

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


當然,例外情況是導入數據已經處於索引順序。實際上,我應該注意到,我現在正在開展一個項目,觀察這種相反的效果。我們希望減少大量進口(從大型機系統每晚轉儲)的運行時間。我們嘗試刪除索引,導入數據並重新創建它們。實際上顯着增加了導入完成的時間。但是,這不是典型的。它只是表明你應該總是先測試你的特定系統。

+0

會插入新的數據到一個臨時表,然後做一些像INSERT INTO TABLE x(SELECT * FROM y)是一個可行的選擇?根據數據庫的不同,可能會涉及一些索引優化 - 或者我可能會標記爲 – 2008-12-08 17:10:19

+0

不,因爲那樣您就會執行兩次插入。當然,你的情況可能會有所不同,但總的來說,這無濟於事。 – 2008-12-08 19:49:42

2

在刪除和重新創建索引時,您應該考慮的一件事是,應該只在自動化進程上運行,這些進程在數據庫使用的低容量時段運行。當索引被刪除時,它不能用於其他用戶可能同時收到的其他查詢。如果您在生產時間內這樣做,您的用戶可能會開始抱怨超時。