SQL Serverデータベースに外部キーを持つ約16の他のテーブルによって参照されるテーブル(T1など)があります。データは、LINQToSQLを使用するASP.NETアプリケーションを介してアクセスされます。ユーザーがT1からレコードを削除しようとすると、ステートメントはタイムアウトになります。そのため、最初にT1を参照するテーブルからレコードを削除し、その後にT1のレコードを削除することにしました。問題は、T1からの削除が期待どおりに速く動作しないことです。SQL削除が長すぎます
私の質問は、レコード自体に子レコードがなくても、他の多くのテーブルによって参照されるテーブルからの削除が時間がかかることは普通ですか?
編集:明らかに、タイムアウトの原因は削除自体ではなく、同じDataContextからデータを取得した別のクエリです。あなたの提案をありがとう、私はそれが私たちのスクリプトの実行計画を改善したため、すべての外部キーのインデックスを追加するための提案に答えてマークしました。
deleteステートメントでクエリアナライザを実行する必要があります。 SQL Serverのほとんどの実装には、実行計画が表示されるプロファイラが含まれています。速度が「通常」であるかどうかを推測するのではなく、ボトルネックを直接的に特定できます。 –
これらの呼び出し中に何が起きているかを見るためにSQLプロファイラを実行しようとしましたか? SQLを取得してから実行計画を実行し、遅延がどこにあるかを確認することができます。 –
外部キーにインデックスがありますか?この古い栗を参照してください:http://zootfroot.blogspot.com/2006/01/slow-sql-server-delete.html –