基于某些研究,似乎AGGREGATION
无法在物化视图中使用FAST FRESH
?
我发现oracle document个状态Complex Materialized View
无法快速刷新。
In some cases, an aggregate function, although it is possible to have an aggregate
function in the defining query and still have a simple materialized view.
For example, the following statement creates a complex materialized view:
CREATE MATERIALIZED VIEW hr.average_sal AS
SELECT AVG(salary) "Average" FROM hr.employees@orc1.example.com;
我创建的物化视图包含多个连接结果的SUM()
聚合(6个六个连接应该返回一些8 thousand
行)。视图应每20秒刷新一次。
这是脚本
CREATE MATERIALIZED VIEW V_MVIEW$BASEVIEW
BUILD IMMEDIATE
REFRESH FAST START WITH (sysdate) NEXT (sysdate+1*20/(60*60*24)) WITH PRIMARY KEY
AS
select
cb.id as cb_id,
vb.id as vb_id,
sb.id as sb_id,
v.id as v_id, v.name as v_name,
t.t1 as t1, t.t2 as t2, t.t3 as t3,
c.id,
SUM(t.amount) as t_amount
from t
join cb on t.cb_id = cb.id
join vb on cb.vb_id = vb.id
join sb on sb.id = vb.sb_id
join v on v.id = sb.v_id
join c on c.id=cb.c_id
GROUP BY
cb.id,
vb.id,
sb.id,
v.id, v.name,
t.t1, t.t2, t.t3,
c.id
;
由于上述限制,我不太确定使用物化视图仍然是有益的,因为每20秒刷新整个视图可能不比普通视图好吗?我该如何优化这种情况?
答案 0 :(得分:0)
根据我的经验,物化视图用于接收服务器在主机系统不可用时不能没有数据的情况。我同意上面的评论,每20秒刷新一次似乎过多,但如果这就是数据的作用,那就是数据的作用。
例如,假设我们有一个订单输入系统和一个库存控制系统。库存控制系统维护库存状态(良好,过期,损坏等)。订单输入系统需要知道订单需要多少好的库存。这对于物化视图来说是个好例子,因为库存状态信息对订单输入过程至关重要。没有它,订单输入系统将无法接受订单,因为它无法检查状态。
然而,在另一边。假设相同的订单输入系统生成库存报告,其中包括配送中心的库存和订单中的库存。配送中心不知道订单,所以我们只是同意订单输入系统是生成此报告的正确位置。如果我们无法生成报告,经理可能抱怨,但不会停止业务。这对于跨dblink的标准视图来说是个好例子。数据的使用并不重要,因此如果库存控制系统由于某种原因而停机,这不是什么大问题,因为订单输入系统可以稍后运行报告。
很抱歉,如果我没有真正回答你的问题,但希望它能给你一些思考。