私は2つのテーブルを持っています-KeysとKeysTemp。
フィールドを使用してKeysTempマージする必要がある一時データが含まれています。クエリは次のとおりです。KeysHash
SELECT
r.[Id]
FROM
[KeysTemp] AS k
WHERE
r.[Hash] NOT IN (SELECT [Hash] FROM [Keys] WHERE [SourceId] = 10)
SourceIdとHashフィールドの両方のテーブルにインデックスがあります。
CREATE INDEX [IdxKeysTempSourceIdHash] ON [KeysTemp]
(
[SourceId],
[Hash]
);
テーブルの同じインデックスですKeysが、クエリはまだ非常に遅いです。一時テーブルには5行、メインテーブルには約60000行あります。ハッシュによるクエリには約27ミリ秒かかりますが、この5行のクエリには約3秒かかります。
SourceIdまた、インデックスを分割してみました。つまり、とに異なるインデックスを作成しましHashたが、同じように機能します。OUTER JOINここではさらに悪化します。その問題を解決する方法は?
UPDATEクエリから
削除するWHERE [SourceId] = 10と、30ミリ秒で完了します。これはすばらしいことですが、この条件が必要です:)
ありがとう