データベース内のユーザーごとに時間のかかるデータ計算を実行するレポートがあり、その結果、ユーザーごとに 10 から 20 の新しいレコードが計算されます。レポートの応答性を向上させるために、計算を実行し、結果をデータベースのスナップショット テーブルにダンプする夜間ジョブが作成されました。アクティブなユーザーに対してのみ実行されます。
したがって、5 万人のユーザーのうち 3 万人がアクティブな場合、ジョブは大きなスナップショット テーブル内の 30 万から 60 万のレコードを「更新」します。現在使用されている方法は、特定のユーザーの以前のすべてのレコードを削除してから、新しいセットを挿入することです。テーブルには PK はなく、データ セットをグループ化するためにビジネス キーのみが使用されます。
私の質問は、毎晩最大 600k のレコードを削除および追加する場合、これを処理するためにテーブルを最適化する手法はありますか? たとえば、データはオンデマンドで再作成できるため、これらの変更が行われたときにテーブルのログを無効にする方法はありますか?
アップデート:
1 つの問題は、スクリプトの動作方法が一度に 1 人のユーザーを調べるため、これをバッチで実行できないことです。そのため、ユーザーを調べ、前の 10 ~ 20 レコードを削除し、10 ~ 20 レコードの新しいセットを挿入します。これを何度も繰り返します。トランザクション ログの容量が不足したり、その他のパフォーマンスの問題が発生したりするのではないかと心配しています。データの保存や速度を低下させる可能性のあるその他の項目について心配するようにテーブルを構成したいと思います。更新中のテーブルに同時にアクセスしているため、インデックスなどをすべて削除することはできません。