【发布时间】:2010-08-04 21:07:30
【问题描述】:
我需要查询订单表以获取昨天交易的所有订单的计数,按发货日期分组。然后我需要有一个额外的列来给出所有交易的发货日期的总订单。当我添加第二列时,处理时间呈指数增长(这是预期的)到 109 秒。有什么办法可以改进这个 SQL 吗?我只是想知道我是否在这里遗漏了任何基本内容。
SELECT t.shipping_date
, t.net_orders
, count(*) as total_orders
FROM (
SELECT s.store_num
, s.store_cd
, to_char(o.shipping_date, 'MM/DD/YYYY') as shipping_date
, COUNT (*) as net_orders
FROM order o left
join store s
on ( s.store_num = o.store_num )
WHERE TRUNC (o.order_date) = TRUNC (SYSDATE - 1)
AND s.store_cd = 'ZZZ'
AND o.status in ('A', 'B')
GROUP BY s.store_num
, s.store_cd
, to_char(shipping_date, 'MM/DD/YYYY')
) t
LEFT JOIN order o ON
( TRUNC (o.shipping_date) = to_date(t.shipping_date, 'MM/DD/YYYY')
and o.store_num = t.store_num )
WHERE o.status in ('A', 'B')
GROUP BY t.shipping_date, t.net_orders;
除了以下表达式之外,我对所有这些列都有索引:TRUNC(order_date) 和 TRUNC(shipping_date)。
【问题讨论】:
-
请说明
shipping_date和order_date字段(内部查询)来自哪个表。 -
我已根据您的要求编辑了上面的 SQL。谢谢。
标签: sql oracle plsql query-optimization