在Oracle中,我遇到了两种类型的插入语句
1)全部插入:可以使用单个sql语句插入多个条目
2)插入:每个插入一个条目将被更新。
现在我想一次插入大约100,000条记录。 (表有10个字段,包括主键)。我不担心任何回报值。
我正在使用oracle 11g。
关于效果,请帮助我哪个更好“插入”或“全部插入”。
答案 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选项的表格,以便在插入过程中加快处理速度。