次のSQLクエリがあり、完了するまでに長い時間がかかります。別のクエリを使用して同じ結果を達成できるかどうかを確認したかったのですが、パフォーマンスにも役立つ可能性があります。
Delete from table1 WHERE fk_id = '1234' AND pk_id NOT IN ('aaaa', 'bbbb', 'cccc');
注:pk_id
はPK
列でfk_id
あり、のFKですtable1
。
次のSQLクエリがあり、完了するまでに長い時間がかかります。別のクエリを使用して同じ結果を達成できるかどうかを確認したかったのですが、パフォーマンスにも役立つ可能性があります。
Delete from table1 WHERE fk_id = '1234' AND pk_id NOT IN ('aaaa', 'bbbb', 'cccc');
注:pk_id
はPK
列でfk_id
あり、のFKですtable1
。
クエリについての提案はありません。かなり基本的なものです。
ただし、インデックスを追加してみてください。
ALTER TABLE table1 ADD INDEX (fk_id);
あなたが提供したデータでは、「AND」条件を使用しているため、クエリに問題はないようです。ここで、データベースを検討して分析し、クエリに時間がかかる理由を分析する必要があります。したがって、次のことを確認することをお勧めします。
1) select count(1)
from table1
where fk_id = '1234' AND pk_id NOT IN ('aaaa', 'bbbb', 'cccc')
これにより、削除される行の数が得られます。
2)
SELECT
T.name AS TableName ,O.name TriggerName
FROM sysobjects O
INNER JOIN sys.tables T ON T.object_id = O.parent_obj
WHERE O.type = 'TR' AND T.name = 'table1' のようなものを試してください。
これにより、テーブルに関連付けられているトリガーがわかります。
3) インデックスのテーブル プロパティ、そこに存在する制約をさらに調査する必要があります。