在oracle中连接更大容量的表



我想在oracle中连接三个较大的表。TableA有3.7亿行,TableB有3.7亿列,主表TableM有60万列。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年的数据插入临时表,但失败了。

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

对这3个表的完全联接将导致8.2140E+22条记录,这似乎是一个笨拙的大型数据集,这也是它需要大量时间的原因。这样的选择有什么用?

对于insert,请使用简单的insert INTO。。。选择。。。来自。。。性能应该比使用pl/sql和大容量收集要好得多。

最新更新