Abh*_*hvi 5 oracle performance insert oracle11g
在Oracle中,我遇到了两种类型的插入语句
1)全部插入:可以使用单个sql语句插入多个条目
2)插入:每个插入将更新一个条目。
现在,我想一次插入约100,000条记录。(表有10个字段,其中包含一个主键)。我不关心任何返回值。
我正在使用oracle 11g。
您能否在“插入”或“全部插入” 方面提供更好的性能帮助我。
我知道这有点像Necro,但它在Google搜索结果中的排名很高,因此我认为这一点值得提出。
如果您正在构建Web应用程序,则全部插入可以显着提高性能,因为它是一条SQL语句,只需要往返数据库一次。在大多数情况下,尽管并非所有情况都如此。查询的大部分成本实际上是延迟。根据所使用的框架,此语法可以帮助您避免不必要的往返。
这看起来似乎非常明显,但是我已经看到大型公司中的许多生产Web应用程序忘记了这个简单的事实。
Insertstatement 和insert allstatement 实际上是相同的常规insert语句。insert all,它已在 9i 版本中引入,仅允许您使用一条语句插入多个表。另一种可用于加快进程的插入类型是直接路径插入 - 您使用/*+ append*/or /*+ append_values*/(Oracle 11g) 提示
insert /*+ append*/ into some_table(<<columns>>)
select <<columns or literals>>
from <<somwhere>>
Run Code Online (Sandbox Code Playgroud)
或(甲骨文 11g)
insert /*+ append_values*/ into some_table(<<columns>>)
values(<<values>>)
Run Code Online (Sandbox Code Playgroud)
告诉 Oracle 您要执行直接路径插入。但是,100K 行并不是那么多行,常规insert语句就可以了。使用具有该数量数据的直接路径插入,您不会获得显着的性能优势。此外,直接路径插入不会重用空闲空间,它会在 HWM(高水位线)之后添加新数据,因此需要更多空间。您将无法使用select语句或其它DML语句,如果您还没有出台commit。