次のようなクエリがあります。
SELECT Distinct(ContKey)
FROM Point
WHERE Created > 1245750191000
AND Created < 1345753791000
AND ContainerId='abcd'
クエリの目的は、範囲を含むいくつかの基準に基づいて、テーブル "Container" のフィールド "Key" にマップされるすべての個別の ContKey 値を取得することです。
動作が非常に遅いです。関連するフィールドとフィールドの組み合わせに関するインデックスがあるため、インデックス作成の問題ではないと確信しています。何百万もの行がある私のデータベースでは、このクエリは 69,338 の結果を返すのに 300 秒かかります。遅すぎる!
DISTINCT
句を削除するためにクエリを書き直そうとしています。私はこれを思いつきました:
SELECT Key
FROM Container t
WHERE t.ContainerId = 'abcd'
AND EXISTS( SELECT 1
FROM Point
WHERE Created > 1245750191000
AND Created < 1345753791000
AND ContainerId = t.ContainerId )
はるかに高速に実行されます (1 秒未満)。しかし、それ以上の結果を生み出します。正確には72,330です。この書き直しは何か間違っていますか?私がやろうとしていることに基づいて、クエリを改善できることを願っています。
ありがとう。