如何避免递归oracle sql查询

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

标签: sql oracle awk

我们有一个计算帐户余额的PL / SQL程序。有两个表,帐户和交易。程序遍历所有帐户,并且每个帐户并行运行此查询! (某些日期的+和 - 交易总和):

SELECT sum(claim) - sum(debt)
FROM transactions
WHERE account_id = :b3
  AND currency_id = :b2
  AND account_type = 2
  AND date > :b1

有超过百万个帐户和相似数量的交易,因此这个pl / sql创建了大量的查询并占用了大量的cpu和时间来完成(并杀死它正在运行的机器)

有没有办法在一次通过事务表(而不是百万次通过)中计算这个,方法是使用group by account_id和currency_id,或者将sum放在关联数组sum [account_id,currency_id]中,就像在awk中一样?会更快吗?当然,总和必须最后插入到余额表中。

1 个答案:

答案 0 :(得分:1)

如果您只想要所有account_id / currency_id组合:

SELECT account_id, currency_id , sum(claim) - sum(debt)
FROM transactions
WHERE account_type = 2
  AND date > :b1
GROUP BY account_id, currency_id