Orders
フィールドを持つ注文を格納するテーブルがあります。
Id
Date
Amount
Cost
Currency
次のクエリを試しました。
SELECT SUM(Amount)-SUM(NFC1)
FROM Orders
WHERE Date BETWEEN '20121101' AND '20121231'
AND Currency = 'EUR'
現在、Oracle SQL Developer によるとCurrency = 'EUR'
、他の操作のコストがはるかに低いため、クエリが遅くなるのはフィルターです。
インデックスを確認したところ、 にインデックスがありId
、 に別のインデックスがありDate
ます。クエリ分析によると、DBMS は最初に必要な日付に一致するレコードを見つけてから、テーブル全体をスキャンして、Currency='EUR'
. Currency
ですVARCHAR
。
クエリを最適化する方法はありますか? つまり、フルスキャンを回避する方法はありますか?
一般的な観点から、レコードが日付でフィルター処理された後に DBMS がフル テーブル スキャンを実行するのを防ぎ、日付でフィルター処理されたレコードの中から一致するレコードを見つけることは可能Currency
ですか?
どうもありがとう