[解決済み] SQLでログのないテーブルの大きなデータを削除する方法は?
2022-05-10 07:29:43
質問
大きなデータ表があります。 このテーブルには1,000万件のレコードがある。
このクエリに最適な方法は何ですか?
Delete LargeTable where readTime < dateadd(MONTH,-7,GETDATE())
どのように解決するのですか?
-
そのテーブルのすべての行を削除する場合、最も簡単な方法は、次のようにテーブルを切り詰めることです。
TRUNCATE TABLE LargeTable GO
WHERE句で削除する行を制限することはできず、トリガも発生しません。
-
一方、80 ~ 90% 以上のデータを削除する場合、たとえば、合計 1100 万行のデータがあり、1000 万行を削除する場合、別の方法として、これらの 100 万行 (維持したいレコード) を別のステージング テーブルに挿入することができます。この大規模なテーブルを切り捨て、これらの100万行を挿入して戻ってくる。
-
あるいは、このラージテーブルを基礎テーブルとするパーミッション/ビューや他のオブジェクトが、このテーブルを削除しても影響を受けない場合、これらの比較的少量の行を別のテーブルに取得し、このテーブルを削除して同じスキーマで別のテーブルを作成し、これらの行をこの元ラージテーブルに戻してインポートすることができます。
-
私が思いつく最後のオプションは、データベースの
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
で、リカバリーモードをフルに戻すのを忘れずに、バックアップを取らないと完全に効果がないと思います(変更、リカバリーモード)。
関連
-
[解決済み] SQL Server データベース復元エラー: 指定されたキャストは無効です。(SqlManagerUI)
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] SQL Server テーブルにカラムが存在するかどうかを確認する方法は?
-
[解決済み] データベース内の全テーブルのサイズを取得する
-
[解決済み] SQL ServerでJOINを使用してUPDATE文を実行するにはどうすればよいですか?
-
[解決済み] 重複した行を削除するにはどうすればよいですか?
-
[解決済み] SQL Server にテーブルが存在するかどうかを確認する
-
[解決済み] クラスター化インデックスと非クラスター化インデックスの実際の意味は何ですか?
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
-
[解決済み] SQL ServerでINNER JOINを使用して削除するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 更新時のSqlエラー : UPDATE ステートメントが FOREIGN KEY 制約と競合しています。
-
[解決済み] パーセント値を保持するための適切なデータ型?
-
[解決済み] T-SQL XOR 演算子
-
[解決済み] テーブルの上位1レコードを更新する sql server [重複].
-
[解決済み] SQL Server: caseステートメントでUniqueIdentifierを文字列に変換する
-
[解決済み] 累積和の求め方
-
[解決済み] シンプルに保つ、クエリで複数のCTEを行う方法
-
[解決済み] SQLサーバーを使用して文字列を切り詰める方法
-
[解決済み] SQL ServerでGROUP BYと一緒にDISTINCTを使用する
-
[解決済み] SQL Server リンクサーバーのクエリ例