Oracle物化视图3 - Prebuilt MV

介绍

Oracle中,Prebuilt MV建立在同名的普通表上。Prebuilt MV的列是该同名表的列的一个子集。也就是说,该同名表可以包含不在MV中出线的列(Unmanaged columns)

MV刷新时,这些列的值采用默认值。假如没有定义默认值,这些列可以不能Not Null约束。


与普通物化视图相比,Prebuilt MV提供的Query Rewrite功能有限。只有当Query_Rewrite_IntegritytrustedStale_Tolerated时,Prebuilt MV可以被Oracle Query Rewrite所使用。


与普通MV不同,当用户删除(Drop)MV时,该同名表不会被删除。在建立了Prebuilt MV后,该同名表不能用drop table xxx语句删除。


例子

下面是Oracle自带SH Schema中一个Prebuilt MV的例子:

CREATE MATERIALIZED VIEW CAL_MONTH_SALES_MV

ON PREBUILT TABLE

USING INDEX

REFRESH ON DEMAND

FORCE

USING DEFAULT LOCAL ROLLBACK SEGMENT

ENABLE QUERY REWRITE AS

SELECT   t.calendar_month_desc

  ,        sum(s.amount_sold) AS dollars

  FROM     sales s

  ,        times t

  WHERE    s.time_id = t.time_id

  GROUP BY t.calendar_month_desc;

Alter Prebuilt MV


当需要在MV里新增一列时,普通物化视图需要重建(drop materialized view, create materialized view),数据量大时,成本相当高。但是Prebuilt MV没有这一缺陷。因为删除物化视图时,同名表仍然存在。下面给出一个例子:

desc cal_month_sales_mv
Name                Null     Type        
------------------- -------- ----------- 
CALENDAR_MONTH_DESC NOT NULL VARCHAR2(8) 
DOLLARS                      NUMBER 

Drop materialized viewcal_month_sales_mv;
materialized view CAL_MONTH_SALES_MV dropped.

alter table cal_month_sales_mv add(quantity_sold number default 0);

table CAL_MONTH_SALES_MV altered.

CREATE MATERIALIZED VIEW CAL_MONTH_SALES_MV
ON PREBUILT TABLE
USING INDEX
REFRESH ON DEMAND
FORCE
USING DEFAULT LOCAL ROLLBACK SEGMENT
ENABLE QUERY REWRITE AS
SELECT   t.calendar_month_desc
  ,        sum(s.amount_sold) AS dollars
  , count(s.quantity_sold) as quantity_sold
  FROM     sales s
  ,        times t
  WHERE    s.time_id = t.time_id
  GROUP BY t.calendar_month_desc;

materialized view CAL_MONTH_SALES_MV created.

desc cal_month_sales_mv
Name                Null     Type        
------------------- -------- ----------- 
CALENDAR_MONTH_DESC NOT NULL VARCHAR2(8) 
DOLLARS                      NUMBER      
QUANTITY_SOLD                NUMBER   


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值