【Oracle】-【索引】先查資料再建索引,還是先建索引再插資料?

bisal發表於2013-07-26

問題:

1、新建一個表結構,建立索引,將百萬或千萬級的資料使用insert匯入該表。
2、新建一個表結構,將百萬或千萬級的資料使用isnert匯入該表,再建立索引。

這兩種效率哪個高呢?或者說用時短呢?
我感覺無論先建還是後建索引,當有資料時都需要update索引資料,問題是有索引的情況下插資料與有資料的情況下建立索引,各自的消耗。


實驗:

100w記錄,

1、先建立表和索引,再插入資料,大約1.3min。
2、先插資料,再建立兩個索引,create table xxx as select * from t where 1<>1;大約13秒,建立兩個索引大約26秒和35秒。


總結:

如果先建立索引再插入資料,每次插入資料還需要修改索引資訊。

實戰還要看業務要求,有的業務可能還需要索引和約束對資料進行校驗,這樣就應該先建立索引了。如果是一次性處理,原則上先插資料後建索引。


另外的問題:

使用nologging可以提高几秒鐘,但使用parallel沒變化,環境是虛機,4個物理CPU,8個虛擬CPU,這裡parallel應該如何設定呢?也請高手指教!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7192724/viewspace-767159/,如需轉載,請註明出處,否則將追究法律責任。

相關文章