4

膨大な量のデータを含むテーブルがある場合...そして「1回限りの削除」ではなく増分削除を行う場合..利点は何ですか?

一括削除

 DELETE table_1
     WHERE BID = @BID
    AND CN = @CN        
     AND PD = @PD;  

増分削除

While (1=1)
Begin
 DELETE TOP (100000) FROM table_1
     WHERE BID = @BID
    AND CN = @CN        
     AND PD = @PD;  

If @@rowcount = 0   -- No row affected.
  BREAK
 ELSE
  Continue
End

SQLサーバーテーブルのデータを 削除するには時間がかかります

4

4 に答える 4

3

構成によっては、大量の削除がトランザクション ログを破壊し、十分なディスク領域がないために障害が発生するのを見てきました。

小さいバッチを使用することで、ロックのエスカレーションを回避することもできます。

于 2010-10-08T18:24:22.253 に答える
1

DBチューニングの場合は新人です....:(

私も...でも
、スイカを一枚ずつ口に入れるのではなく、少しずつ食べる/噛むことの利点を感じたり推測したりするために、技術的な複雑さ(ロックのエスカレーションなど)を理解する必要はありません。

于 2010-10-10T13:22:15.973 に答える
1

The difference is the size of the rollback information.

SQL Server is transactional, before the delete is committed it should be possible to rollback the transaction.

Take the following example:

  • Free space on harddisk 10 GB
  • Information to be deleted 20 GB

When you start the delete the transaction log will grow until the disk is full then it will crash.

Even with enough disk space there are other problems, database locking or performance hits. This can be a serious problem if deleting data from a live system.

于 2010-10-08T19:52:48.143 に答える
1

または、保持したいデータをエクスポートし、テーブルを切り捨てて、データをロードし直すこともできます。これはより速いかもしれません。データの 50% を保持したい場合でも、より高速になる可能性があります。truncate は最小限のログしか記録されません。独自のベンチマークを実行する

于 2010-10-08T19:42:35.793 に答える