質問

3列のテーブルがあります:

user varchar、status varchar、rep int

ステータスと担当者は頻繁に更新され、要件の1つは次のとおりです。

指定された日付で、各ユーザーの日時値ビューのステータスと担当者の値を指定します。

update_at datetime列をテーブルに追加し、既存の行を更新する代わりに同じユーザーで新しい行を挿入できますが、テーブルが大きくなり、クエリ結果を他のテーブルの同様の結果に結合する必要があるため、高速クエリ。

SQL Serverのこの問題に対する最良のパフォーマンスのソリューションは何ですか?

役に立ちましたか?

解決

レポート情報の使用方法によっては、履歴テーブルを作成して、メインテーブルを更新する前に、現在の値を履歴テーブルに書き込み、タイムスタンプを追加するのが最善の方法かもしれません。

履歴から特定の日/ユーザー/ステータスのみを実際に選択している場合は、それが最適です

他のヒント

ほとんどの場合、参加時に現在のステータスのみを照会すると想定しているため、これは別個の関連テーブルとして保存します。このタイプのクエリを多数実行し、このタイプのデータをこれだけではなく多くのテーブルに追加する場合は、レポート用に別のOLAPデータベースを作成します。

これを実行している限り、変更を行ったユーザーも記録するかどうかを検討できます。次に、基本的に監査ソリューションを構築しました。

このための1つのオプションは、2つの個別のテーブルを使用することです。「現在の値」テーブル、および履歴テーブル。現在の値のテーブルには、各ユーザーの最新の値のみが含まれます。これにより、テーブルは小さくなり、結合しやすくなります。履歴テーブルには、リストした3つの列とタイムスタンプ列が含まれ、経時的な値の変更を追跡します。現在の値テーブルの値を変更したいときはいつでも、gettime()をタイムスタンプとして使用して、新しい値を持つ行を履歴テーブルに同時に追加します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top