Oracle通过SQL插入大量数据

时间:2018-07-12 19:46:43

标签: sql oracle rownum

我需要使用几个ORACLE表来加载第三个表。要加载的总行数约为3000万。我的Insert SQL查询是INSERT-INTO-<TABLE>-SELECT

我的查询挂起(等待30分钟,然后终止会话)。但是,当我在ROWNUM查询中使用SELECT值等于结果行总数的ROWNUM时,INSERT查询运行了43秒。

而且,两个结果都是一致的。

我在这里完全迷路了。任何人都可以对为什么没有ROWNUM的INSERT查询挂起而为什么使用ROWNUM的INSERT查询运行得更快的问题发表专业意见吗?

详细信息:

  • TABLE-A:总共有50,000,000行;列1上的主键和其他12个索引,其中包括列2上的一个索引
  • 表-B:总共有200,000行;存在于COLUMN1中的索引(与TABLE-A的关系是一对多)
  • TABLE-C:输出表

原始INSERT查询:

INSERT INTO C 
SELECT COLUMN1 FROM A WHERE COLUMN2 IN (SELECT COLUMN1 FROM B);

Data Types involved in the above query are NUMBER.

使用ROWNUM插入查询:

SELECT COUNT(*) 
FROM A
WHERE COLUMN2 IN (SELECT COLUMN1 FROM B); -- No issues with this query

INSERT INTO C 
    SELECT COLUMN1 FROM A
    WHERE COLUMN2 IN (SELECT COLUMN1 FROM B) AND ROWNUM <=30,000,000; -- result from the above select query

Explain Plan of the query with rownum

Explain Plan of the query without rownum

0 个答案:

没有答案