我们有一个计算帐户余额的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中一样?会更快吗?当然,总和必须最后插入到余额表中。
答案 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