Sql 并行运行Oracle For循环
我必须遵循AWS RDS上oracle数据库的sqlSql 并行运行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
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。。。我的甲骨文知识非常有限。。。任何特定类型的索引都会有用吗?