优化CTE查询

时间:2013-01-24 14:41:04

标签: sql sql-server sql-server-2008

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

Calculating information by using values from previous line

我提出了一个解决方案,但是当我将它应用到我的实际数据库(超过450万条记录)时,它似乎永远需要。在我停止它之前它跑了3个多小时。然后我尝试在一个子集上运行它(CTEtest为(选择前100名)并且它已经持续了一个半小时。这是因为在选择前100名之前还需要完成整个过程吗?或者我应该假设如果这个查询占用100个记录需要2个小时,那么450万个需要几天?我该如何优化呢?

有没有办法查看查询剩余的时间?

1 个答案:

答案 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)上的索引应该能够满足查询的这一部分,而无需返回原始数据。