我正在使用相当大的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相比),该函数只需几毫秒。
我能做些什么来改善表现吗?我对临时表的理解或者如何在查询中使用函数有什么不对吗?
任何帮助将不胜感激。