0

昨日、CTEと現在の合計計算について質問しました。

前の行の値を使用して情報を計算する

私は解決策を思いつきましたが、それを実際のデータベース(450万レコード以上)に適用しようとすると、それは永遠にかかるようです。私がそれを止める前にそれは3時間以上走りました。次に、サブセット(CTEtest as(select top 100))で実行しようとしましたが、1時間半実行されました。これは、トップ100を選択する前に、すべてを実行する必要があるためですか?または、このクエリが100レコードで2時間かかる場合、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 に答える