使用临时表来提高内部联接性能

时间:2016-03-15 16:41:25

标签: sql oracle performance join temp-tables

我正在使用相当大的oracle数据库,在事务表中只有很少的millon记录。我需要做多个内部联接来生成报告。

所以这是场景:

一个。我必须加入5个表(比如说t1,t2 ... t5)作为报告。

湾每个表都有一个链接这些表的标识符(比如说uid)。

℃。由于我对这些表中的所有记录不感兴趣,因此我只使用所需的记录创建临时表(temp1,temp2 ... temp5)。每个临时表只包含一列 - uid。

℃。我正在寻找的结果是所有这些表temp1-temp5的内部联接。换句话说,我对所有5个临时表中存在的uid感兴趣。

d。创建temp5需要一些计算。我有一个接受uid的函数,查询另一个表,检索一个数字并进行计算,并向调用函数返回一个布尔值,指示是否在列表中包含或排除uid。

即这个函数的逻辑非常简单(虽然它需要每次运行一个查询),并且该函数在几毫秒内运行。

问题:为了提高性能,在创建temp5期间,我在temp1而不是t5中传递uid(根据我在(c)中描述的要求)。

原始查询:

SELECT uid FROM  t5 where calculate_function(uid) = 0. 

更新了查询:

SELECT uid FROM  temp1 where calculate_function(uid) = 0. 

我希望这个查询能够提高性能。但是查询仍然需要2-3个小时才能执行,即使temp1只包含20000行(与包含少量行的t5相比),该函数只需几毫秒。

我能做些什么来改善表现吗?我对临时表的理解或者如何在查询中使用函数有什么不对吗?

任何帮助将不胜感激。

0 个答案:

没有答案