Web アプリケーション (asp.net + mssql) で販売履歴を表示するという非常に一般的なタスクがあります。次のような販売トランザクションのテーブルがあります。
- SellerID (string)
- Product PartNumber
- Product ManufacturerName
- ProductID (string uniq normalized PN+MN)
- Date of sale
- Price
- Qty
- Option 1
- Option 2
- Option 3
オプションは、いくつかの特定の属性 (契約番号など) です。
Qty と Amount の合計を含む productID でグループ化された販売データを表示する必要があります。また、SellerId、Date、および Options でフィルタリングできるようにする必要があります。したがって、ユーザーはテーブルを見る必要があります:
- Part Number
- Manufacturer Name
- Sum(Qty)
- Sum(Price)
また、ユーザーは表示された列でソートおよびフィルタリングし、ページを移動できます
現在、約 500 万件の販売レコードがあり、このようなグループ化、フィルタリング、および並べ替えを使用した «直接» クエリは時間がかかりすぎます (また、この Web サービスを複数の同時ユーザーが使用できるようにすることは考えていません)。
より高速に動作させるために、クエリで使用されているすべての基準でキャッシュ キーを作成し、クエリの結果全体を同じスキーム (およびキャッシュ キー) でキャッシュ テーブルにコピーしていました。ただし、キャッシュ テーブルが急速に大きくなる、キャッシュ テーブルにインデックスを作成するのが難しい (挿入が遅くなる) など、いくつかの欠点があります。
このタスクは非常に一般的であり、販売を扱うほとんどのビジネス アプリケーションで有名であると確信しています。
人々はこれらすべての問題をどのように解決するのでしょうか?
UPD:言及するのを忘れていました。
販売データの挿入はありません (以前は四半期に 1 回手動でロードしていました)
オラップについて考えていましたが、実際に作業したことはありません。オラップを使うのは理にかなっていますか?
他のデータベースを使用することが理にかなっていれば、SQL Server に強く制約されることはありません。