知识大全 创建最简单物化视图
Posted 视图
篇首语:日日行不怕千万里,天天讲不吝千万言,时时做不惧千万事。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 创建最简单物化视图相关的知识,希望对你有一定的参考价值。
Oracle物化视图:创建最简单物化视图 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
物化视图是一种特殊的物理表 物化 (Materialized)视图是相对普通视图而言的 普通视图是虚拟表 应用的局限性大 任何对视图的查询 Oracle都实际上转换为视图SQL语句的查询 这样对整体查询性能的提高 并没有实质上的好处
Oracle最早在OLAP系统中引入了物化视图的概念 但后来很多大型OLTP系统中 发现类似统计的查询是无可避免 而这些查询操作如果很频繁 对整体数据库性能是很致命的 于是Oracle开始不断的改进物化视图 使得其也开始合适OLTP系统 从Oracle i到现在 功能已经相对比较完备了
本文是Oracle物化视图系列文章的第一篇 有两个主要目的 来体验一下创建ON DEMAND和ON MIT物化视图的方法 ON DEMAND和ON MIT物化视图的区别在于其刷新方法的不同 ON DEMAND顾名思义 仅在该物化视图 需要 被刷新了 才进行刷新(REFRESH) 即更新物化视图 以保证和基表数据的一致性;而ON MIT是说 一旦基表有了MIT 即事务提交 则立刻刷新 立刻更新物化视图 使得数据和基表一致
第一个ON DEMAND物化视图
创建ON DEMAND物化视图
下面创建一个最简单的物化视图 这个物化视图的定义很类似于普通视图的创建语句 只是多了一个materialized 但就是这个单词 造成了物化视图和普通视图(虚拟表)的天壤之别 也引申出后面很多的事情 呵呵
本例中需要特别注意的是 Oracle给物化视图的重要定义参数的默认值处理 在下面的例子中会有特别说明 因为物化视图的创建本身是很复杂和需要优化参数设置的 特别是针对大型生产数据库系统而言 但Oracle允许以这种最简单的 类似于普通视图的办法来做 所以不可避免的会涉及到默认值问题
像我们这样 创建物化视图时未作指定 则Oracle按ON DEMAND模式来创建
从下例中可以看出
) 物化视图在某种意义上说就是一个物理表(而且不仅仅是一个物理表) 这通过其可以被user_tables查询出来 而得到佐证;
) 物化视图也是一种段(segment) 所以其有自己的物理存储属性;
) 物化视图会占用数据库磁盘空间 这点从user_segment的查询结果 可以得到佐证
● 创建物化视图
获取数据库rdbms版本信息
SQL> select * from v$version; BANNER Oracle Database g Enterprise Edition Release Production PL/SQL Release Production CORE Production TNS for bit Windows: Version Production NLSRTL Version – Production
创建物化视图
SQL> create materialized view mv_testcf as select * from xiaotg testcf; Materialized view created
分析物化视图 以获得统计信息
SQL> analyze table xiaotg mv_testcf pute statistics; Table analyzed
查看物化视图的行数 发现和master表(TESTCF)一样
SQL> select tl table_name tl num_rows from user_tables tl where tl table_name in ( TESTCF MV_TESTCF ); TABLE_NAME NUM_ROWS MV_TESTCF TESTCF
查看物化视图的存储参数
SQL> col segment_name for a SQL> select sg segment_name sg bytes sg blocks from user_segments sg where sg segment_name = MV_TESTCF ; SEGMENT_NAME BYTES BLOCKS MV_TESTCF
● 查看物化视图关键定义
查看物化视图的定义设置 请关注蓝色字体部分
这表明 默认情况下 如果没指定刷新方法和刷新模式 则Oracle默认为FORCE和DEMAND
其他的集中刷新方法和刷新模式以后将分别予以介绍
SQL> select mv * from user_mviews mv where mv MVIEW_NAME = MV_TESTCF ;
(为增加查询结果的可读性 下面进行了行列的互转)
OWNERXIAOTG MVIEW_NAMEMV_TESTCF CONTAINER_NAMEMV_TESTCF QUERY QUERY_LEN UPDATABLEN UPDATE_LOG MASTER_ROLLBACK_SEG MASTER_LINK REWRITE_ENABLEDN REWRITE_CAPABILITYGENERAL REFRESH_MODEDEMAND REFRESH_METHODFORCE BUILD_MODEIMMEDIATE FAST_REFRESHABLEDML LAST_REFRESH_TYPEPLETE LAST_REFRESH_DATE : STALENESSFRESH AFTER_FAST_REFRESHFRESH UNKNOWN_PREBUILTN UNKNOWN_PLSQL_FUNCN UNKNOWN_EXTERNAL_TABLEN UNKNOWN_CONSIDER_FRESHN UNKNOWN_IMPORTN UNKNOWN_TRUSTED_FDN PILE_STATEVALID USE_NO_INDEXN STALE_SINCE NUM_PCT_TABLES NUM_FRESH_PCT_REGIONS NUM_STALE_PCT_REGIONS
测试ON DEMAND物化视图的更新特性
物化视图最重要的功能和特性之一 就是其数据会随着基表(或称主表 master表 本例中为TESTCF)的变化而变 基表数据增了 物化视图数据会变多;基表数据删了 物化视图数据也会变少
但怎么更新?或者说物化视图的数据怎么随着基表而更新?Oracle提供了两种方式 手工刷新和自动刷新 像我们这种 在物化视图定义时 未作任何指定 那当然是默认的手工刷新了 也就是说 通过我们手工的执行某个Oracle提供的系统级存储过程或包 来保证物化视图与基表数据一致性
这是最基本的刷新办法了 但所谓的自动刷新 其实也就是Oracle会建立一个job 通过这个job来调用相同的存储过程或包 加以实现 这在本系列文章的第 篇会将以详细阐述
下面将测试INSERT UPDATE和DELETE的测试方法类似 大家有兴趣的话 可以自己试一试
需要注意的是 下面暂不讨论如何刷新ON DEMAND物化视图 这是下一篇文章的内容 下面仅仅关注ON DEMAND物化视图的特性及其和ON MIT物化视图的区别 即前者不刷新(手工或自动)就不更新物化视图 而后者不刷新也会更新物化视图 ——只要基表发生了MIT
● 在基表插入测试数据
基表数据插入后 会发现 物化视图并不会随之更新
检查基表和物化视图是否有 这一行记录
SQL> col id for a ; SQL> col name for a ; SQL> select * from xiaotg testcf t where t id = ; ID NAME SQL> select * from xiaotg mv_testcf t where t id = ; ID NAME
插入测试数据
这时发现 基表有数据 但物化视图并没有
SQL> insert into xiaotg testcf values ( xiaotg he he ); row inserted SQL> mit; Commit plete
测试物化视图数据是否更新
从下面的实验可以看出 物化视图数据不会更新 即使等上 分钟 小时 或者 天
关于如何使得ON DEMAND物化视图数据被更新 参加本系列的第二篇文章哈 )
SQL> select * from xiaotg testcf t where t id = ; ID NAME xiaotg he he SQL> select * from xiaotg mv_testcf t where t id = ; ID NAME SQL>
第一个ON MIT物化视图
最简单的ON MIT物化视图的创建 和上面创建ON DEMAND的物化视图区别不大 因为ON DEMAND是默认的 所以ON MIT物化视图 需要再增加个参数即可
创建ON MIT物化视图
● 创建物化视图
需要注意的是 无法在定义时仅指定ON MIT 还得附带个参数才行 本例中附带refresh force 关于这个参数的意思 以后将加以阐述
创建ON MIT物化视图
SQL> create materialized view mv_testcf refresh force on mit as select * from xiaotg testcf; Materialized view created SQL>
分析物化视图和基表
SQL> analyze table xiaotg mv_testcf pute statistics; Table analyzed SQL> analyze table xiaotg testcf pute statistics; Table analyzed
查看当前基表和物化视图的行数
SQL> select tl table_name tl num_rows from user_tables tl where tl table_name in ( TESTCF MV_TESTCF ); TABLE_NAME NUM_ROWS MV_TESTCF TESTCF
● 查看物化视图关键定义
可以从DBA_MVIEWS中看出 刷新模式为MIT 这也是它和上面ON DEMAND物化视图的唯一区别
SQL> select mv * from user_mviews mv where mv MVIEW_NAME = MV_TESTCF ;
(为增加查询结果的可读性 下面进行了行列的互转 且只显示前三个关键列的)
REFRESH_MODEMIT REFRESH_METHODFORCE BUILD_MODEIMMEDIATE
测试ON MIT物化视图的更新特性
ON MIT物化视图会在基表一旦提交时 就会立刻更新物化视图本身 而且一般仅在物化视图数据也被更新后 基表数据才会事实的提交
这意味着 这种模式可能会导致延迟基表数据的提交 这点在下面的实验中体现得很清楚
实验中 对基表TESTCF 平常的MIT在 秒内可以完成 但在有了ON MIT视图MV_TESTCF 后 居然要 秒 速度减低了很多倍 ON MIT视图对基表的影响可见一斑
● 在基表中插入数据
SQL> set timing on; SQL> insert into xiaotg testcf ( id name ) values ( xiaotg again he he ); row inserted Executed in seconds SQL> mit; Commit plete Executed in seconds SQL> select * from xiaotg testcf where id = ; ID NAME xiaotg again he he Executed in seconds SQL> col id for a ; SQL> col name for a ; SQL> select * from xiaotg testcf where id = ; ID NAME xiaotg again he he Executed in seconds SQL> select * from xiaotg mv_testcf where id = ; ID NAME xiaotg again he he Executed in seconds
● 测试基表正常情况下的MIT速度
cha138/Article/program/Oracle/201311/17144相关参考
本文中我们通过实例的方法来帮助您理解物化视图刷新过程中出现的约束冲突问题 即使将物化视图的约束建立和基表完全一致由于物化视图的刷新机制也会产生约束冲突的现象 以下是一个简单的示例 SQL
高性能MySQL:物化视图 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 物化视图 许多数据库
Advisor 在g将查询重写并且引进了新的强大的调优建议者使管理物化视图变得容易多了 物化视图(Materia
Oracle10g中管理物化视图变得更加容易 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 利用
SQL实战新手入门:创建视图(1) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 创建视图()
SQL实战新手入门:创建视图(2) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 创建视图()
SQL入门:创建视图 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 如视图中所讨论的视图提供在一
Oracle多表创建的视图insert解决方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 单
知识大全 orale数据库如何利用sql语句创建视图的一般性使用方法
SQLCREATEVIEW语句什么是视图?在SQL中视图是基于SQL语句的结果集的可视化的表 视图包含行和列就像一个真实的表视图中的字段就是来自一个或多个数据库教程中的真实的表中的字段我们可以向
高机复制就是物化视图 物化视图是包括一个查询结果的数据库对像它是远程数据的的本地副本或者用来生成基于数据表求和的汇总表物化视图存储基于远程表的数据也可以称为快照 物化视图可以查询表视图和其