2

SQL Server 2008 では、数百万行のデータを削除する必要があります。それらは一握りのテーブルに散らばっています。削除には最大20秒かかりますが、これは遅いと思います! 削除するデータは列で識別されtimestampます。最適化するためにこれまでに行ったことは次のとおりです。

  • 分離レベルを使用しますread uncommitted。取引は気にしません。失敗すると、ユーザーは削除操作を再度発行します。timestampまた、新しいデータには、削除中のデータが含まれていないことが保証されます。
  • 親テーブルの前にリーフ テーブルを削除します。
  • 列は PK クラスター化インデックスのtimestamp一部であり、実際には PK/インデックスの最初の位置です。
  • 各テーブルは、トランザクション ログのオーバーヘッドを削減するために上位 200000 エントリを削除するループを使用して空にされます。
  • サーバーで I/O も CPU も使い果たされていない

私は何を見落としましたか?

また、タイムスタンプ列を PK の最初の位置に移動した場合の影響についても疑問があります。その後、テーブルを再編成する必要がありますか、または SQL Server はこれを行うのに十分スマートです。クラスター化インデックスについての私の理解では、行の物理的なレイアウトを定義するため、データの再編成が強制されるということです。しかし、クラスター化インデックス操作の変更に時間がかかるという顧客からの苦情はありません。

4

1 に答える 1