2013-10-24 109 views
3

在Oracle中我遇到兩種類型的INSERT語句甲骨文全部插入VS插入

1)將所有的來了每個插入。

現在我想每次插入大約100,000條記錄。 (表格有10個包含主鍵的字段)。我不關心任何回報價值。

我使用的是oracle 11g。

你能幫我關於性能哪個更好「插入」或「全部插入」。

+0

它們不同*語法*,與性能無關。 –

回答

4

Insert聲明和insert all聲明幾乎是相同的傳統insert聲明。已在9i版本中引入的insert all只允許您使用一個語句插入到多個表中。插入,你可以用它來加快這一進程的另一種類型是直接路徑插入 - 您使用/*+ append*//*+ append_values*/(的Oracle 11g)暗示

insert /*+ append*/ into some_table(<<columns>>) 
    select <<columns or literals>> 
    from <<somwhere>> 

或(的Oracle 11g)

insert /*+ append_values*/ into some_table(<<columns>>) 
    values(<<values>>) 

告訴你想要執行直接路徑插入的Oracle。但是,100K行並不是那麼多的行和傳統的insert語句就可以做得很好。使用該數據量的直接路徑插入,您不會獲得顯着的性能優勢。此外,直接路徑插入不會重用可用空間,它會在HWM(高水位標記)之後添加新數據,因此需要更多空間。如果您尚未發佈commit,則無法使用select語句或其他DML語句。

0

要使用FORALL,您需要PLSQL表。 這個過程非常快。

您還可以選擇表格,使其具有NO LOG選項,以便在插入過程中加快過程。

2

我知道這是一種死靈,但它在谷歌搜索結果上非常高,所以我認爲這是值得一提的一點。

如果您正在構建Web應用程序,則Insert All可以帶來顯着的性能優勢,因爲它是一條只需要一次往返數據庫的SQL語句。在大多數情況下,儘管遠離所有情況。查詢的大部分成本實際上是延遲。根據您使用的框架,此語法可以幫助您避免不必要的往返。

這看起來似乎非常明顯,但在大型公司中我看到許多生產Web應用程序已經忘記了這個簡單的事實。