(はい、別のを追加します 答え。正当化:根本的な問題に別の方法で対処します。)
根本的な問題は、SUM(amount)
などのさまざまな統計情報から派生する「トランザクション」テーブルが増え続けていることです。 。このパフォーマンスは、テーブルが大きくなるにつれて悪化するだけです。
この回答の基礎は、「履歴」と「現在」の2つの方法でデータを確認することです。 Transactions
歴史です。新しいテーブルはCurrent
になります 各ユーザーの合計。しかし、私はそれを行うための複数の方法を見ています。答えを得るために773K行を追加しないように、それぞれに何らかの形式の小計が含まれます。
- 従来の銀行の方法...毎晩、その日の
Transactions
を集計します それらをCurrent
に追加します 。 - マテリアライズドビューの方法...行が
Transactions
に追加されるたび 、Current
をインクリメントします 。 - ハイブリッド:毎日の小計を「要約テーブル」に保持します。これらの小計を合計して、
SUM
を取得します 昨夜まで。
バンキングまたはハイブリッド方式の最新の残高は少し注意が必要です:
- 昨夜の金額を取得する
- 日中に発生したトランザクションを追加します。
どのアプローチもたくさん ユーザーの773K行すべてをスキャンするよりも高速ですが、コードはより複雑になります。