【发布时间】:2014-11-26 18:59:18
【问题描述】:
我有一个类似的查询:
select a.id,
a.date,
-- case statements using h.fields
from advr a,
(select id,
date,
advr_id,
advr_nbr,
row_number() over(partition by id, date order by advr_nbr) adv_number
from advr_hist) h
where a.id = h.id
and a.date = h.date
group by a.id, a.date
我的许多案例陈述的一个例子:
max(case
when h.adv_number = 1 then
h.advr_id
else
' '
end) advr_1
这很好用,但加载速度很慢。如果我删除h 表中的case 语句和,一切都很快。如果我只是查询h select 语句,一切都很快。然而加入它们会使其运行非常缓慢,因此我考虑将其作为一种视图进行重新设计。
如何从 select 语句中获得相同的结果,但在外部 select 语句中有 row_number() adv_number 字段?希望这是有道理的。
【问题讨论】:
-
您是否尝试过预过滤 adv_number = 1 的
h表并与a表进行左连接? -
也许您应该比较两个查询的查询执行计划以发现关键差异?
-
它应该没有任何区别,如果你使用它,你必须以某种方式付费。 “快速”是指快速选择前几行还是取回所有数据?
标签: sql oracle query-optimization window-functions