在oracle中加入更大量的表

时间:2015-04-10 07:58:07

标签: sql oracle oracle11g

我想在oracle中加入三个更大的表。 TableA有3.7亿行,TableB有3.7亿行,主表TableM有600 000行。 TableM是TableA和TableB中其他两个表的主表。

我的查询就像

Select A.MasterId, B.Date1
  FROM TableA A
INNER JOIN TableB B on B.MasterId= A.MasterId
INNER JOIN TableM M ON M.MasterId= A.MasterId

当我执行上述查询时,需要很长时间。我想通过获取五年数据的值来拆分查询执行与WHERE子句。我们总共有25年的数据,所以我可以执行以下查询五次并将值插入Temp表。

我的方法是。

方法1:

使用UNION运算符,我可以组合结果集并将值插入Temp表。花了太长时间。

Select A.MasterId, B.Date1
  FROM TableA A
INNER JOIN TableB B on B.MasterId= A.MasterId
INNER JOIN TableM M ON M.MasterId= A.MasterId
WHERE M.Date > '01-JAN-1985' and M.Date <'01-JAN-1990'
UNION ALL
Select A.MasterId, B.Date1
  FROM TableA A
INNER JOIN TableB B on B.MasterId= A.MasterId
INNER JOIN TableM M ON M.MasterId= A.MasterId
WHERE M.Date > '01-JAN-1990' and M.Date <'01-JAN-1995'

.....

方法2:

尝试使用批量收集将5年数据插入临时表,但失败了。

还有其他方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

这三个表的完全连接将导致8.2140E + 22个记录,这看起来像一个笨重的大型数据集,这也是为什么它需要一个loooooong时间。 这样一个选择会有什么用?

对于插入,使用简单的INSERT INTO ... SELECT ... FROM ... 性能应该比使用批量收集的pl / sql好得多。