sql >> データベース >  >> RDS >> Sqlserver

ログなしでSQLのテーブルの大きなデータを削除するにはどうすればよいですか?

    1. そのテーブルのすべての行を削除する場合、最も簡単なオプションは、テーブルを切り捨てることです。

       TRUNCATE TABLE LargeTable
       GO
      

    テーブルを切り捨てると、テーブルが空になります。WHERE句を使用して削除される行を制限することはできず、トリガーは起動されません。

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

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

    3. 私が考えることができる最後のオプションの1つは、データベースの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
      

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



    1. PLS-00201識別子'PACKAGENAME.PROCEDURENAME'を宣言する必要があります

    2. 複数の列の間にセットのような一意性を適用するにはどうすればよいですか?

    3. ナンバーシリーズジェネレータチャレンジソリューション–パート3

    4. チャートの種類の紹介