Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 并行运行Oracle For循环_Sql_Oracle_For Loop_Parallel Processing_Sql Insert - Fatal编程技术网

Sql 并行运行Oracle For循环

Sql 并行运行Oracle For循环,sql,oracle,for-loop,parallel-processing,sql-insert,Sql,Oracle,For Loop,Parallel Processing,Sql Insert,我必须遵循AWS RDS上oracle数据库的sql BEGIN FOR user_id_count IN 1..4000 LOOP INSERTUSERINTOFINALTABLE(user_id_count); END LOOP; END; 其中INSERTUSERINTOFINALTABLE过程定义如下 INSERT INTO FinalTable (USERID, ABC, DEF, ...,XYZ ) select a.USERID, b.ABC, b.D

我必须遵循AWS RDS上oracle数据库的sql

BEGIN
 FOR user_id_count IN 1..4000 LOOP
   INSERTUSERINTOFINALTABLE(user_id_count);
 END LOOP;
END;
其中INSERTUSERINTOFINALTABLE过程定义如下

INSERT INTO FinalTable (USERID,  ABC,  DEF, ...,XYZ )
 select
  a.USERID,
  b.ABC,
  b.DEF,
  ....
  b.XYZ
from a
left outer join b on a.USERID = b.userid
where a.userid = USER_ID and b.XYZ not in ( select XYZ from c);
我之所以不把所有用户都当作一个简单的insert int来做,是因为我的数据非常大,我想确保我没有耗尽内存

问题是,有没有一种方法可以在oracle中并行运行


谢谢

并行插入多行没有意义。我会解释原因

如果
insert
语句是循环中的唯一语句,则这些语句实际上不会并行运行。这是因为
insert
语句是原子的


不能在同一会话中同时运行两条insert语句,特别是当insert语句基于另一个表中的select语句时,这很可能会锁定该表以进行并发读取操作。

理论上,可以使用DBMS\U JOB创建大量作业,但我不确定这对你来说是否是个好主意。@Amer:并行运行不太可能带来任何好处。尝试优化sql和索引。这可能会帮助更多。我的sql非常简单。。。你认为我能做些什么吗?我可以对源表或目标表做哪些有帮助的更改?您将其标记为Oracle。你的目标是MySQL还是Oracle?顺便说一下,两者都有索引。好吧,那我误解了。尽管如此,索引在某些情况下还是有很大帮助的。在
b.userid,b.XYZ
上建立索引已经很有帮助了。谢谢Patrick。。。我的甲骨文知识非常有限。。。任何特定类型的索引都会有用吗?