MATERIALIZED VIEW
Oracle的实体化视图提供了强大的功能,可以用在不同的环境中,实体化视图和表一样可以直接进行查询。实体化视图可以基于分区表,实体化视图本身也可以分区。
主要用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。在数据仓库中,还经常使用查询重写(query rewrite)机制,这样不需要修改原有的查询语句,Oracle会自动选择合适的实体化视图进行查询,完全对应用透明。实体化视图和表一样可以直接进行查询。
实体化视图还用于复制、移动计算,远程同步等方面。
实体化视图有很多方面和索引很相似:使用实体化视图的目的是为了提高查询性能;实体化视图对应用透明,增加和删除实体化视图不会影响应用程序中SQL语句的正确性和有效性;实体化视图需要占用存储空间;当基表发生变化时,实体化视图也应当刷新。
materialized view 同snapshot是同一个概念。但同view是不一样的:
1)物化视图是存储数据的视图,存储了基础表的全部或者一部分数据,主要用作sql语句的优化,查询物化视图比查询表中的数据速度要快;
2)MV是自动刷新或者手动刷新的,View不用刷新;
3) MV也可以直接update,但是不影响base table,对View的update反映到base table上;
4)MV主要用于远程数据访问,mv中的数据需要占用磁盘空间,view中不保存数据
使用语法:
CREATE MATERIALIZED VIEW XX
REFRESH [[fast | complete | force]
[on demand | commit]
[start with date]
[next date]
[with {primary key | rowid}]
]
[ENABLE | DISABLE] QUERY REWRITE
Refresh 刷新子句
描述 当基表发生了DML操作后,实体化视图何时采用哪种方式和基表进行同步
取值 FAST 采用增量刷新,只刷新自上次刷新以后进行的修改
COMPLETE 对整个实体化视图进行完全的刷新
FORCE(默认) Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用Fast方式,否则采用Complete的方式,Force选项是默认选项
ON DEMAND(默认) 实体化视图在用户需要的时候进行刷新,可以手工通过 DBMS_MVIEW.REFRESH等方法来进行刷新,也可以通过JOB定时进行刷新
ON COMMIT 实体化视图在对基表的DML操作提交的同时进行刷新
START WITH 第一次刷新时间
NEXT 刷新时间间隔
WITH PRIMARY KEY(默认) 生成主键实体化视图,也就是说实体化视图是基于表的主键,而不是ROWID(对应于ROWID子句)。 为了生成PRIMARY KEY子句,应该在表上定义主键,否则应该用基于ROWID的实体化视图。主键实体化视图允许识别实体化视图表而不影响实体化视图增量刷新的可用性
REWRITE 字句
包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE两种。
分别指出创建的实体化视图是否支持查询重写。查询重写是指当对实体化视图的基表进行查询时,Oracle会自动判断能否通过查询实体化视图来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的实体化视图中读取数据
默认 DISABLE QUERY REWRITE
例子:
首先创建表
CREATE TABLE my_tables AS
SELECT DBA_TABLES.* FROM DBA_TABLES;
CREATE TABLE my_indexes AS
SELECT DBA_INDEXES.*
FROM DBA_TABLES, DBA_INDEXES
WHERE DBA_TABLES.OWNER = DBA_INDEXES.table_owner
AND DBA_TABLES.TABLE_NAME = DBA_INDEXES.table_name
创建簇
CREATE CLUSTER my_cluster(index_type VARCHAR2 (30))
SIZE 8192 HASHKEYS 5;
创建MV
CREATE MATERIALIZED VIEW my_mv
CLUSTER my_cluster(index_type)
REFRESH FAST ON COMMIT
ENABLE QUERY REWRITE
AS
SELECT t.ROWID AS table_rowid,
t.owner AS table_owner,
t.tablespace_name,
i.rowId AS index_rowId,
i.index_type
FROM my_tables t,
my_indexes i
WHERE t.owner = i.table_owner
AND t.table_name = i.table_name;
MATERIALIZED VIEW的更多相关文章
- PostgreSQL rule view materialized view examples
warehouse_db=# create table tab_view(emp_id int not null,emp_name varchar(10),emp_city varchar(10)); ...
- [terry笔记]物化视图 materialized view基础学习
一.物化视图定义摘录: 物化视图是包括一个查询结果的数据库对像(由系统实现定期刷新数据),物化视图不是在使用时才读取,而是预先计算并保存表连接或聚集等耗时较多的操作结果,这样在查询时大大提高了 ...
- Advanced Replication同步复制实验(基于Trigger&基于Materialized View)
1. 高级复制和流复制介绍 1.1 高级复制(Advanced Replication) 高级复制也称为对称复制,分为多主体站点复制(Multiple Master Rplication).物化视图站 ...
- Materialized View in Oracle - Concepts and Architecture
List all of MV inoracle: select owner, query, query_len from dba_mviews See content of aMV: select * ...
- 物化视图(materialized view) 实现数据迁移、数据定时同步
近日公司有一个9i 的Oracle数据库,运行效率低下.想要将其升级到11G. 但是升级之前 要将数据进行同步,好在表不是很多.只有三张表.业务压力也不大,就想到了使用物 化视图的方式将数据同步过来. ...
- Materialized View模式
Materialized-View模式是在要求数据格式不利于查询操作的情况下,根据多个数据仓库的数据生成预生成的视图的一种模式.这种模式可以帮助支持高效的查询和数据提取,提高应用程序的性能. 问题 在 ...
- ora-904 rowid create materialized view
create materialized view t_v asselect t1.*,1 as marker,rowid from t1 t1union allselect t2.*,2 as mar ...
- ORA-12052: cannot fast refresh materialized view
SQL> execute dbms_mview.refresh ('TX_FAIL_LOG_DAY_MV', 'f'); BEGIN DBMS_MVIEW.REFRESH ('TX_FAIL_L ...
- Tuning 16 Using Materialized view
物化视图表示在数据库的其他地方另外存放了一份as 后边的内容, 如果只是普通view, 那么 rowid 是相同的, view相当于指针, 它指向基表. 而物化视图的rowid 与基表是不一样的, 所 ...
随机推荐
- C++为了兼容,所以并不是纯面向对象编程语言
理想如果不向现实做点妥协,理想就会归于尘土.面向对象怎能把一切传统抛开!
- FTP协议及工作原理详解
1. FTP协议 什么是FTP呢?FTP 是 TCP/IP 协议组中的协议之一,是英文File Transfer Protocol的缩写. 该协议是Internet文件传送的基础,它由一系列规格说明文 ...
- OpenJudge 666:放苹果
总时间限制: 1000ms 内存限制: 65536kB 描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. 输 ...
- The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.问题解决
didFailLoadWithError(): Error Domain=NSURLErrorDomain Code=-1022 "The resource could not be loa ...
- IOS基础之设置APP的名字、设置图标、添加等待加载时的图片
1.我们的app一般默认的名字是我们的工程名字,所以我们一般会更改一个更加友好的名字,更改的方法如下图: 找到InfoPlist.strings文件,在里面添加语句CFBundleDisplayNam ...
- 一款类似塔防类的保卫羊村游戏android源码
一款类似塔防类的保卫羊村游戏源码,这个游戏很像我们平时玩的塔防游戏的,游戏的源码比较完整的,大家可以修改一下或者添加一些广告就可以上线到应用商店了,而且这个游戏目前已经上线国内的一些应用商店了,360 ...
- Windows Phone 7 中拷贝文件到独立存储
private void CopyToIsolatedStorage(){ using (IsolatedStorageFile storage = IsolatedStorageFile.Ge ...
- SQL Server死锁的分析、处理与预防
1.基本原理 所谓“死锁”,在操作系统的定义是:在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态. 定义比较抽象,下图可以帮助你比较直观的 ...
- 判断php数组维度的小例子
分享一例判断php数组维度的代码,供大家参考. 如下所示: <?php /** * 返回数组的维度 * @param [type] $arr [description] * @return [t ...
- sql2012安装过程中出现个一个问题
最近安装了一次SQLSERVER2012,遇到了一个小问题,截图如下: 就是上图中状态为失败的项,点开之后,会弹出下面的一个框: 在网上搜了之后,有了这样的答案: http://www.cnblogs ...