扫地不过是我表面上的工作,我真正的身份其实是无名老僧-----------手里那根扫把~

物化视图应用之初体验~~~

上一篇 / 下一篇  2007-05-11 00:00:00 / 个人分类:三思笔记

itpub论坛中曾有兄弟说过materialized view是以空间换时间,我认为非常贴切。物化视图实际就是基于查询的数据拷贝,其形式

简单理解的话可以看成是create table table_name as select * from table。

呵呵,人们总是希望事情越简单越好嘛,于是当俺看到这个东西这么简单,头脑一发热也迫不及待冲了过云,下面我就具体描述一

下我的一次实施过程。



我们的业务表中有一个用户表users,记录过千万,其中有一个状态值isbest以此判断是否是推荐用户,在前端有页面用来查询推荐

用户。如果直接查询users表,加上来回翻页等等,效率完全无法忍受,我们最初的方案很传统。
首先:
create table users_best as select * from users where isbest=1;

然后:
create or replace procedure RUN_DAYBACKUPBESTUSER is
begin

execute immediate 'truncate table users_best';
Insert Into users_best Select * from select * from users where isbest=1;
commit;

end RUN_DAYBACKUPBESTUSER;

最后:创建job定期执行RUN_DAYBACKUPBESTUSER。逻辑很简单,实施完之后效果还不错,但当看到物化视图之后感觉物化视图仿佛

实现会更简单,于是。。。。。。

首先:drop table users_best;
然后:
CREATE MATERIALIZED VIEW USERS_BEST
refresh complete
as
select * from users where isbest=1;
(refresh是做什么用的呢?用来指定刷新计划,参数有三个fast、complete和force,fast利用物化视图日志(这个东西也有意思,回头专门写文详述)同步需要更新的行,complete则是重建视图,force相当于将权力将给oracle了,它爱怎么地怎么地吧)

看看结果,select * from user_best;en结果是正确的,可是它怎么自动刷新呢?再改改。。。

CREATE MATERIALIZED VIEW USERS_BEST
refresh complete
Start With Sysdate Next trunc(sysdate, 'HH24')+1/12
as
select * from users where isbest=1;

start with指定第一次同步的时间,next则是下次执行时间了,当前设置为每2小时同步一次。于是借助materialzed view,只需要简单的几行代码就实现了之前又是create as又是proc又是job的功能。

再回个头来看看,哇塞功能果然是相当强大,操作果然是相当简单,看来oracle在客户可能出现的操

作逻辑方面确实考虑良多,基本上我们想要的它都帮我们实现了,并且如此复杂的功能以如此简单的操作实现。

好了,初体验至此结束,大家热切的期待着俺的再体验吧:)


TAG:

君三思的学习轨迹~~~~ 引用 删除 junsansi   /   2008-04-16 09:08:12
呵呵,是指查询表的时候自动转向到查询物化视图?没开查询重写吧~~~
引用 删除 del   /   2008-04-14 15:36:24
我自己试了一下,不是,执行计划里也看不到任何的优化,不过可能是我某个地方没有设置好(oracle9i)。
请指教。谢谢。
引用 删除 del   /   2008-04-14 15:35:41
冒味请教!
利用上面的例子,
Select * from select * from users where isbest=1;

Select * from select * from users_best;
在最终执行时被解释为一样的,是不是?
我自己试了一下,不是,执行计划里也看不到任何的,不过可能是我某个地方没有设置好(oracle9i)。
请指教。谢谢。
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar