【发布时间】:2020-04-12 07:21:59
【问题描述】:
我在订单行表上有这个查询。它是一张相当大的桌子。我正在尝试获取过去 365 天内按项目发货的数量。查询有效,但返回结果非常慢。我应该为此使用基于函数的索引吗?我读了一些关于他们的文章,但根本没有和他们一起工作。
我怎样才能使这个查询更快?
select OOL.INVENTORY_ITEM_ID
,SUM(nvl(OOL.shipped_QUANTITY,0)) shipped_QUANTITY_Last_365
from oe_order_lines_all OOL
where ool.actual_shipment_date>=trunc(sysdate)-365
and cancelled_flag='N'
and fulfilled_flag='Y'
group by ool.inventory_item_id;
解释计划:
统计数据是最新的,我们每周重聚一次。
查询需要 30 多分钟才能完成。
更新
添加此索引后:
查询运行得更快,但不是“快”。大约 6 分钟后完成。
更新2
我按照 Matthew 和 Gordon 的建议创建了一个覆盖索引:
查询现在在不到 1 秒的时间内完成。
我仍然想知道为什么或是否基于函数的索引也是一个可行的解决方案,但我现在没有时间玩它。
【问题讨论】:
-
解释计划是什么?有哪些可用的索引?你的统计数据是最新的吗?
-
请了解here如何以文本形式发布完整的执行计划。