How to delete large data of table in SQL without log? Ask Question

How to delete large data of table in SQL without log? Ask Question

I have a large data table. There are 10 million records in this table.

What is the best way for this query

   Delete LargeTable where readTime < dateadd(MONTH,-7,GETDATE())

ベストアンサー1

  1. If you are Deleting All the rows in that table the simplest option is to Truncate table, something like

     TRUNCATE TABLE LargeTable
     GO
    

Truncate table will simply empty the table, you cannot use WHERE clause to limit the rows being deleted and no triggers will be fired.

  1. 一方、80 ~ 90 パーセントを超えるデータを削除する場合、たとえば合計 1,100 万行あり、そのうち 1,000 万行を削除したい場合、別の方法として、これらの 100 万行 (保持したいレコード) を別のステージング テーブルに挿入します。この大きなテーブルを切り捨て、これらの 100 万行を挿入し直します。

  2. または、この大きなテーブルを基礎テーブルとして持つ権限/ビューまたはその他のオブジェクトが、このテーブルを削除しても影響を受けない場合は、これらの比較的少量の行を別のテーブルに取得し、このテーブルを削除して同じスキーマを持つ別のテーブルを作成し、これらの行をこの非常に大きなテーブルにインポートし直すことができます。

  3. Recovery Mode to SIMPLE最後に考えられる選択肢は、次のような while ループを使用して、データベースを変更し、行を小さなバッチで削除することです。

     DECLARE @Deleted_Rows INT;
     SET @Deleted_Rows = 1;
    
    
     WHILE (@Deleted_Rows > 0)
       BEGIN
        -- Delete some small number of rows at a time
          DELETE TOP (10000)  LargeTable 
          WHERE readTime < dateadd(MONTH,-7,GETDATE())
    
       SET @Deleted_Rows = @@ROWCOUNT;
     END
    

リカバリ モードを完全に戻すことを忘れないでください。また、変更またはリカバリ モードを完全に有効にするには、バックアップを取る必要があると思います。

おすすめ記事