天天看點

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

問題:

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應該如何設定呢?也請高手指教!