Oracle多插入语句

前端之家收集整理的这篇文章主要介绍了Oracle多插入语句前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的应用程序中,我必须添加许多记录.我使用以下构造:
INSERT /*+ append parallel(t1,4) parallel(t2,4) */ ALL
   INTO t1 (col1,col2,col3) VALUES ('val1_1','val1_2','val1_3')
   INTO t2 (col1,col3) VALUES ('val2_1','val2_2','val2_3')
   INTO t2 (col1,col3) VALUES ('val3_1','val3_2','val3_3')
   .
   .
   .
SELECT 1 FROM DUAL;

我也在使用APPEND和PARALLEL提示.请注意,我在两个不同的表中插入数据.似乎并行被忽略了(DBA告诉我).那我怎么知道它是否被使用?是否可以在此类构造中使用PARALLEL提示?有效吗?

这可能足以使它工作:
alter session enable parallel dml;

您可以使用以下查询检查实际的并行度:

select px_servers_executions,v$sql.*
from v$sql where lower(sql_text) like '%insert%parallel%' order by last_load_time desc;

如果你仍然没有得到并行性,那么有很多可能的原因.首先,看看这些参数:

select * from v$parameter where name like 'parallel%'

但是您可能不希望insert语句具有并行性.并行性具有大量开销,并且通常仅在处理数千或数百万条记录时才有用.

我猜你真正的问题是解析大型sql语句的时间.多表插页特别糟糕.如果您尝试插入超过几百行,则查询将花费很多秒来进行解析.根据您的Oracle版本,如果您尝试使用501表,它将永远挂起.运行几个较小的查询而不是一个大查询要快得多.例如,100行的5个插入将比500行的一个插入快得多. (一般来说,这与Oracle的性能调整完全相反.这是一种特殊情况,因为与解析大型sql语句有关的错误.)

猜你在找的Oracle相关文章