[解決済み] SQLのDelete文が非常に遅い
2023-07-01 03:04:11
質問
このようなステートメントがありますが、タイムアウトしてしまいます。
DELETE FROM [table] WHERE [COL] IN ( '1', '2', '6', '12', '24', '7', '3', '5')
こんな感じで1つずつやってみました。
DELETE FROM [table] WHERE [COL] IN ( '1' )
で、今のところ22分、まだ続いています。
テーブルには26万行があり、4列になっています。
なぜこれほど遅くなるのか、どのように高速化するのか、どなたかお分かりになる方はいらっしゃいますか? WHERE を行っている [COL] には、一意でない、クラスター化されていないインデックスがあります。 SQL Server 2008 R2 を使用しています。
update: このテーブルにはトリガーがありません。
どのように解決するのですか?
削除が遅くなる原因となるもの。
- 多くのレコードを削除する
- 多くのインデックス
- 子テーブルの外部キーにインデックスがない。(コメントで言及してくださった @CesarAlvaradoDiaz さん、ありがとうございました)
- デッドロックとブロッキング
- トリガー
- カスケード削除(10個の親レコードを削除すると、数百万個の子レコードが削除されることになります。 何百万もの子レコードが削除されることになる)
- トランザクション ログが増大する必要がある
- チェックすべき外部キーが多い
つまり、ブロックしているものを見つけて修正するか、通常の生産負荷に干渉しない時間帯に削除を実行するかという選択肢があります。削除はバッチで実行できます (トリガー、カスケード削除、または多数のレコードがある場合に便利です)。インデックスを削除して再作成することができます(これも営業時間外に行うことができれば最高です)。
関連
-
MHAの高可用性構成とフェイルオーバー
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] PHPでSQLインジェクションを防ぐにはどうしたらいいですか?
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] SQL Server テーブルにカラムが存在するかどうかを確認する方法は?
-
[解決済み] UNIONとUNION ALLの違いは何ですか?
-
[解決済み] SQL ServerでJOINを使用してUPDATE文を実行するにはどうすればよいですか?
-
[解決済み] クラスター化インデックスと非クラスター化インデックスの実際の意味は何ですか?
-
[解決済み】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 実装 サイバーパンク風ボタン
おすすめ
-
MySQL】1136 - 列数が1行目の値数と一致しない問題を解決
-
org.postgresql.util.PSQLException: ERROR: リレーション "userinfo" の列 "loginid" が存在しません。
-
[解決済み] PostgreSQLのCREATE DATABASE IF NOT EXISTSをシミュレートしてみませんか?
-
[解決済み] SQLサーバーでNULL = NULLがfalseに評価される理由
-
[解決済み] SQL Serverでシングルクォートをエスケープするにはどうすればよいですか?
-
[解決済み] SQL Serverでストアドプロシージャ内のテキストを検索する
-
[解決済み] SQL Serverには、.NETのMath.Maxのような2つの値を取るMax関数はありますか?
-
[解決済み] SQL ServerでINSERT INTOとしてデータをエクスポートする
-
[解決済み] T-SQL文の接頭辞Nの意味と使うべきタイミングは?
-
[解決済み] Sql Server 2008を使用して、テーブルから上位1000行を削除する方法は?