我有一个表Orders
存储订单,与字段:优化SQL查询:过滤未编制索引的字段
Id
Date
Amount
Cost
Currency
我尝试以下查询:
SELECT SUM(Amount)-SUM(NFC1)
FROM Orders
WHERE Date BETWEEN '20121101' AND '20121231'
AND Currency = 'EUR'
现在,根据甲骨文的SQL开发者,查询缓慢的原因是Currency = 'EUR'
过滤器,因为其他操作的成本更低。
我检查了索引,我在Id
上有一个索引,另一个索引是Date
。 在我看来,通过查询分析,DBMS首先找到匹配所需日期的记录,然后扫描整个表以找到具有Currency='EUR'
的记录。 Currency
是VARCHAR
。
有没有什么办法来优化查询?我的意思是,有没有办法避免全面扫描?
从一般的观点来看,是否有可能在已经按日期过滤记录之后阻止DBMS执行全表扫描,而是在已经过滤的记录中找到与Currency
相匹配的记录日期?
非常感谢
你能告诉我们执行计划吗? –
Oracle显然只会扫描应用以前的过滤器后留下的记录的子集。 1.你为什么认为它正在进行全面扫描? 2。你为什么认为它是先按日期过滤? – Bulat
向我们展示执行计划(以格式化文本发布,不是屏幕截图) –