0

昨天我问了一个关于 CTE 和运行总计算的问题;

使用上一行的值计算信息

我想出了一个解决方案,但是当我将它应用到我的实际数据库(超过 450 万条记录)时,它似乎需要很长时间。在我停止之前,它运行了 3 个多小时。然后我尝试在一个子集上运行它(CTEtest 为(选择前 100 名)),它已经运行了一个半小时。是不是因为在选择前100名之前还需要贯穿整个事情?或者我应该假设如果这个查询需要 2 个小时来处理 100 条记录,那么需要几天来处理 450 万条记录?我该如何优化呢?

有什么方法可以查看查询还剩多少时间?

4

1 回答 1

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)应该能够满足这部分查询,而不需要返回原始数据。

于 2013-01-24T14:53:34.313 回答