Oracle Insert All vs Insert

时间:2013-10-24 07:19:28

标签: performance oracle insert oracle11g

在Oracle中,我遇到了两种类型的插入语句

1)全部插入:可以使用单个sql语句插入多个条目

2)插入:每个插入一个条目将被更新。

现在我想一次插入大约100,000条记录。 (表有10个字段,包括主键)。我不担心任何回报值。

我正在使用oracle 11g。

关于效果,请帮助我哪个更好“插入”或“全部插入”。

3 个答案:

答案 0 :(得分:4)

Insert语句和insert all语句几乎与传统的insert语句相同。 {9}中引入的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(高水位线)之后添加新数据,因此需要更多空间。如果您尚未发布select,则无法使用commit语句或其他DML语句。

答案 1 :(得分:3)

我知道这是一种死灵,但它在谷歌搜索结果中相当高,所以我认为这是值得做的一点。

如果您正在构建Web应用程序,那么

Insert All可以带来显着的性能优势,因为它是一个只需要往返数据库的单个SQL语句。在大多数情况下,尽管远非所有情况。查询的大部分成本实际上是延迟。根据您使用的框架,此语法可以帮助您避免不必要的往返。

这看起来非常明显,但我在大公司看到过许多生产网络应用程序,这些应用程序已经忘记了这个简单的事实。

答案 2 :(得分:0)

要使用FORALL,您需要PLSQL表。 这个过程非常快。

您也可以选择具有NO LOG选项的表格,以便在插入过程中加快处理速度。