我想在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年数据插入临时表,但失败了。
还有其他方法可以解决这个问题吗?
答案 0 :(得分:1)
这三个表的完全连接将导致8.2140E + 22个记录,这看起来像一个笨重的大型数据集,这也是为什么它需要一个loooooong时间。 这样一个选择会有什么用?
对于插入,使用简单的INSERT INTO ... SELECT ... FROM ... 性能应该比使用批量收集的pl / sql好得多。