最小/最大/平均のクエリを実行している場合、集計テーブルを使用するのと、単純に生のテーブルの行の範囲に対してクエリを実行するのとではどちらが好みですか?
これは明らかに非常に自由回答形式の質問であり、正解は 1 つではありません。そのため、人々の一般的な提案を探しているだけです。生データ テーブルが、タイムスタンプ、数値外部キー (ユーザー ID など)、および 10 進数値 (購入金額など) で構成されているとします。さらに、テーブルに何百万もの行があるとします。
私は両方をやりましたが、引き裂かれています。一方では、集計テーブルによってクエリが大幅に高速化されましたが、追加のテーブルが急増しました。集計範囲の現在の値を表示するには、元のデータ テーブルに完全に戻すか、より詳細な集計を組み合わせる必要があります。どの集計テーブルを照会するかをアプリケーション コードで追跡するのは、思った以上の作業であり、元の集計範囲では常に十分ではないため、スキーマの変更が必要になることがわかりました ("しかし、過去 3 回の支払い期間の売り上げです!」)。
一方、生データからのクエリは非常に遅くなる可能性がありますが、データ範囲について非常に柔軟に対応できます。範囲の境界が変更された場合、集計テーブルを再構築するのではなく、クエリを変更するだけです。同様に、アプリケーション コードの更新も少なくて済みます。インデックス作成についてもっと賢くなれば (つまり、常に適切なインデックスをカバーしていれば)、生データから選択する際のペナルティを減らすことができると思いますが、それは決して万能薬ではありません。
両方の長所を活かす方法はありますか?