首页 > 其他分享 >物化视图-2

物化视图-2

时间:2023-04-20 10:58:23浏览次数:37  
标签:基表 -- sales 视图 物化 刷新

物化视图分类:

1.包含聚合的物化视图
2.质保函连接的物化视图
3.嵌套物化视图

三种物化视图的快速刷新的限制条件有很大区别,而对于其他方面则区别不大。创建物化视图时可以指定多种选项,下面对集中主要的选择进行简单说明:

1.创建方式(BuildMethods)包括Build Immediate 和 Build defered

build Immediate 是在创建物化视图时就生成数据
build defered 则是在创建时不生成数据,以后根据需要生成数据,默认为build immediate

2.重写查询(QueryRewrite)包括Enable Query和Disable Query Rewrite
查询重写是指当对物化视图的基表进行查询时, oralce会自动判断是否通过查询物化视图得

到结果,如果可以,则避免聚集和连接操作,而直接从已经计算好的物化视图中读取数据.默

认为 Disable Query Rewrite
3.刷新(Refresh):指当基表发生dml操作后,物化视图采用那种方式和基表同步。
刷新模式有两种:on demand 和 on commit,两者区别在于刷新方法不同
On demand 指物化视图在用户需要的时候进行刷新,可以手工通过dbms_mview.refresh等方

法来进行刷新,也可以通过job定时进行刷新,即更新物化视图,以保证和基表数据的一致性


而on commit 是说,一旦有了commit 即事务提交,则立刻刷新,立刻更新物化视图,使得数

据和基表一致。对应基表,平常commit在0.01秒内可以完成,但在有了on commit视图后,居

然要6秒,速度低了很多

物化视图,根据不同的这种店可以有不同分类:

1.按刷新方式:fast/complete/force
2.按刷新时间的不同:on demand/on commit
3.按是否可更新:updatable/read only
4.按是否支持查询重写:enable query rewrite/disablequery rewrite

物化视图有三种刷新方式:complete、fast、force

1.完全刷新(complete) 会删除表中所有记录(如果是单表刷新,可能会采用truncate的方

式),然后根据物化视图中查询语句的定义重新生成物化视图
2.快速刷新(fast) 采用增量刷新机制,只将自上次刷新以后对基表进行的所有操作刷新到物

化视图中去,fast必须创建基于基表的视图日志.对于增量刷新选项,如果在子表中存在分析

函数,则物化视图不起作用。

3.采用force方式,oracle 会自动判断是否满足快速刷新的条件,如果满足则进行快速刷新

,否则进行完全刷新

示例

drop table sales
--创建基表 
create table sales(Id integer,ProductName varchar2(50),UnitPrice number(8,2),Count integer,Cost number(8,2),SaleDate date,
constraint sales_pk primary key(Id)
);
--创建序列
drop sequence sales_seq;
create sequence sales_seq start with 1 nocycle;
--创建触发器
create or replace trigger tr_sales_insert 
before insert on sales 
for each row
begin
  select sales_seq.nextval into :new.Id from dual;
  select (:new.UnitPrice*:new.Count) into :new.Cost from dual;
  select sysdate into :new.SaleDate from dual;
end;
--插入测试数据
insert into sales(ProductName,UnitPrice,Count) values('篮球',125.5,4);
commit;
select * from sales;

--创建物化视图
create materialized view sales_mv   
build immediate    --1. build immediate 创建视图时加载数据   2.build defered  不加载数据
disable query rewrite   --1.enable query rewrite 从物化视图读取数据   2.从基表读取数据  (查询分析器在遇到查询基表的sql语句时的优先策略)
as
select * from sales;
--在基表上创建监控日志
create materialized view log on sales;  --默认为 with primary key  如果没有主键可以 with rowid
--查询物化视图
select * from sales_mv;  --因为使用了 build immediate 因此可以查到从基表加载过来的数据
--刷新物化视图 刷新时间间隔,每1天刷新一次,时间为凌晨10点
alter materialized view sales_mv refresh force on demand
start with sysdate next to_date(concat(to_char(sysdate+1,'yyyy-mm-dd'),'10:29:00'),'yyyy-mm-dd,HH24:mi:ss');

--插入测试数据
insert into sales(ProductName,UnitPrice,Count) values('足球',186.7,6);
insert into sales(ProductName,UnitPrice,Count) values('羽毛球',37.2,12);
select * from MLog$_Sales;  --基表执行了DML ,日志表中就有数据
--查询物化视图
select * from sales_mv;  --数据还没有被加载,因为未到定时刷新时间 

--手工执行快速刷新  
select * from user_jobs;
begin
  dbms_mview.refresh('sales_mv','f');  --参数2  f (fast)快速刷新   c (complete) 完全刷新
  --dbms_refresh.refresh('sales_mv');   --方法2是刷新包中封装的方法,可直接传入物化视图名称进行刷新
end;

image

  • 定时刷新
    image

image

image

  • 手动刷新
    image

标签:基表,--,sales,视图,物化,刷新
From: https://www.cnblogs.com/sundh1981/p/17335977.html

相关文章

  • Oracle mos文档关于视图v$open_cursor中说法矛盾
     Oraclemos文档关于视图v$open_cursor中矛盾说法 HowtoMonitorandtuneOpenandCachedCursors(文档ID1430255.1)中指出:v$open_cursorshowscachedcursors,notcurrentlyopencursors,bysession.Ifyouarewonderinghowmanycursorsasessionhasopen......
  • Django视图类中标准导出Excel文件模版(自用)
    一、导出基类、Excel文件处理和保存importhashlibimportosimporttimeimportxlsxwriterfromapplicationimportsettingsfromapps.web.op_drf.filtersimportDataLevelPermissionsFilterfromapps.web.op_drf.responseimportSuccessResponsefromapps.web.wsys......
  • pg 物化视图相关
    一、物化视图简介类似oracle,pg的物化视图也是物理是实际存在的表。在执行某些查询时效率较低,而且使用传统方法(例如索引)无法显著提高效率,这时常用的方法是将需要查询的数据事先查好并储存起来,这样就不需要每次查询都从头执行一次。这种“缓存”机制其实就是物化视图。CREATEMA......
  • Oracle 物化视图
    oracle中常常会用物化视图来同步数据或者迁移数据。在dbms_mview中刷新过程,可以使用并行刷新的特性,这样有效的减少了完全刷新的时间。dbms_mview('表名','F')快速刷新,也是增量刷新,即只对异动数据进行刷新dbms_mview('表名','C')完全刷新步骤:creatematerializedviewl......
  • 创建视图
     创建一个oracle视图字段为employee_no,system,site,account_type,permmision_desc,remark。视图里的内容取自表permmison,字段为employee,permmision,site。视图中的employee_no为表employee字段内容,system都命名为ETSsystem,site为B2,permmision_desc为permmision字段内容,acco......
  • Django——视图
    Django的视图(View)一个视图函数(类),简称视图,是一个简单的Python函数(类),它接受Web请求并且返回Web响应。响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片。将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中FBV与CBVFBV(FuncitonB......
  • django 1.8 官方文档翻译: 3-1-2 编写视图
    Django文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。交流群:467338606编写视图一个视图函数,或者简短来说叫做视图,是一个简单的Python函数,它接受web请求,并且返回web响应。响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片…是任何东......
  • django 1.8 官方文档翻译: 3-4-2 内建显示视图
    Django文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。交流群:467338606基于类的内建通用视图编写Web应用可能是单调的,因为你需要不断的重复某一种模式。Django尝试从model和template层移除一些单调的情况,但是Web开发者依然会在view(视图)层经历这种厌烦。Django......
  • django 1.8 官方文档翻译: 3-4-3 使用基于类的视图处理表单
    使用基于类的视图处理表单表单的处理通常有3个步骤:初始的的GET(空白或预填充的表单)带有非法数据的POST(通常重新显示表单和错误信息)带有合法数据的POST(处理数据并重定向)你自己实现这些功能经常导致许多重复的样本代码(参见在视图中使用表单)。为了避免这点,Django提供一系列的通用的......
  • django 1.8 官方文档翻译: 3-4-1 基于类的视图
    基于类的视图视图是一个可调用对象,它接收一个请求然后返回一个响应。这个可调用对象可以不只是函数,Django提供一些可以用作视图的类。它们允许你结构化你的视图并且利用继承和混合重用代码。后面我们将介绍一些用于简单任务的通用视图,但你可能想要设计自己的可重用视图的结构以适......