私は2つのテーブルを持っています-Keys
とKeysTemp
。
フィールドを使用してKeysTemp
マージする必要がある一時データが含まれています。クエリは次のとおりです。Keys
Hash
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ミリ秒で完了します。これはすばらしいことですが、この条件が必要です:)
ありがとう