加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle多插入语句

发布时间:2020-12-12 16:23:51 所属栏目:百科 来源:网络整理
导读:在我的应用程序中,我必须添加许多记录.我使用以下构造: 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,
在我的应用程序中,我必须添加许多记录.我使用以下构造:
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语句有关的错误.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读