我有一个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
?
非常感谢