0

私のクエリに関して、似たような質問やよくた質問を見つけることができました。しかし、同じことを行うより良い方法があるかどうか知りたいです。

Web サービス エンドポイントへの呼び出しによって入力されるデータベース テーブルがあります。特定のイベントが発生し、新しいレコードがこのテーブルに挿入されると、エンドポイントが呼び出されます。イベントはリアルタイムで発生し、イベントの発生頻度やパターンは決まっていません。

テーブルは次のようになります。

CREATE TABLE MyTbl(id int, type nvarchar(10), timestamp datetime, category nvarchar(50));

次のようにテーブルからデータを取得しています。

SELECT category,
COUNT(CASE WHEN type = 'sent' THEN 1 END) sent,
COUNT(CASE WHEN type = 'received' THEN 1 END) received,
COUNT(CASE WHEN type = 'blocked' THEN 1 END) blocked,
COUNT(CASE WHEN type = 'opened' THEN 1 END) opened
FROM MyTbl
WHERE timestamp >= '2013-01-01 00:00:00' AND timestamp < '2013-02-01 00:00:00'
GROUP BY category

およびレポートの詳細についてはdatabase schema、こちらをご覧くださいsample dataselect-query

次のことを考えると:

  1. データはリアルタイムでテーブルに供給されます
  2. テーブルには、約 100 の膨大な量のデータが格納されます。10,00,000 以上のレコード
  3. レポートクエリの構造は変更されません
  4. データは、カテゴリ、開始日、および終了日でフィルタリングされます (すべてオプションのパラメーターです)。
  5. 時間は関係ありません。日付部分のみです

定期的に実行されるスケジュールされたタスクを実行し、 からの値で新しいテーブルを更新することは良い考えでしょうMyTblか? 新しいテーブルは、レポート クエリのようになります。

Date | Category | Sent | Received | Blocked | Opened

このテーブルは、カテゴリと日付のフィルターを適用してクエリを実行します。

このアプローチの欠点:

  1. 私たちはまだ毎日データを維持する必要があります
  2. GROUP BY と SUM を適用する必要があります
  3. 元のアプローチよりも多くのデータベース操作が必要になる場合があります
  4. リアルタイムですべてのデータを取得できるわけではありません。

このアプローチの利点:

  1. データベースからのレコードのフェッチを高速化して、表示、並べ替え、およびページングのプロセスを高速化できます

これは実行可能なアプローチですか?プロセスをスピードアップする他の方法はありますか? 助けてください!

4

1 に答える 1