0

次のSQLクエリがあり、完了するまでに長い時間がかかります。別のクエリを使用して同じ結果を達成できるかどうかを確認したかったのですが、パフォーマンスにも役立つ可能性があります。

Delete from table1 WHERE fk_id = '1234' AND pk_id NOT IN ('aaaa', 'bbbb', 'cccc');

注:pk_idPK列でfk_idあり、のFKですtable1

4

2 に答える 2

0

クエリについての提案はありません。かなり基本的なものです。

ただし、インデックスを追加してみてください。

ALTER TABLE table1 ADD INDEX (fk_id);
于 2012-07-20T18:12:46.070 に答える
0

あなたが提供したデータでは、「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) インデックスのテーブル プロパティ、そこに存在する制約をさらに調査する必要があります。

于 2012-07-21T00:47:48.313 に答える