昨天我问了一个关于CTE和运行总计算的问题;
Calculating information by using values from previous line
我提出了一个解决方案,但是当我将它应用到我的实际数据库(超过450万条记录)时,它似乎永远需要。在我停止它之前它跑了3个多小时。然后我尝试在一个子集上运行它(CTEtest为(选择前100名)并且它已经持续了一个半小时。这是因为在选择前100名之前还需要完成整个过程吗?或者我应该假设如果这个查询占用100个记录需要2个小时,那么450万个需要几天?我该如何优化呢?
有没有办法查看查询剩余的时间?
答案 0 :(得分:0)
我认为你最好将运行总和作为相关子查询。这将允许您更好地管理性能索引:
select memberid,
(select sum(balance - netamt) as runningsum
from txn_by_month t2
where t2.memberid = t.memberid and
t2.accountid <= t.accountid
) as RunningSum
from txn_by_month t
使用此结构,txn_by_month(memberid, accountid, balance, netamt)
上的索引应该能够满足查询的这一部分,而无需返回原始数据。