设为首页 加入收藏

TOP

11GConcept第四章翻译Partitions,Views,andOtherSchemaObjects(分区,视图,以及其他SchemaObjects)(五)
2014-11-24 08:16:37 来源: 作者: 【 】 浏览:8
Tags:11GConcept 第四章 翻译 Partitions Views andOtherSchemaObjects (分区 视图 及其他 SchemaObjects
关联的原始表叫做master table

下图图解 一个数据库中的物化视图(数据基于其他数据库),master table的更新操作将复制到物化视图数据库。

\

Characteristics ofMaterialized Views(物化视图的特性)

物化视图与普通视图和索引具有某些共同的特性。

物化视图在以下几方面与索引类似:

·都拥有真正的数据,消耗存储

·当master表数据更改时,它们的数据都会随之刷新

·当用于查询重写操作时,它们都可以提升sql的执行性能

·它们的存在对于SQL应用和用户来说是透明的。

物化视图和视图相似的地方是,它显示的数据是其他表或者视图中的,用户可以直接使用SELECT语句来查询物化视图。取决于所需要的刷新类型,物化视图也可以使用DML语句进行更新。

下面的例子创建和填充了一个物化视图,基于的sh用户的三个master tables:

CREATE MATERIALIZED VIEW sales_mv AS

SELECT t.calendar_year, p.prod_id, SUM(s.amount_sold) AS sum_sales

FROM times t, products p, saless

WHERE t.time_id = s.time_id

AND p.prod_id = s.prod_id

GROUPBY t.calendar_year, p.prod_id;

下面的示例删除了sales表,这个表是sales_mv的master 表之一,然后查询sales_mv.

可以查询出数据,因为在物化视图中的数据和master表中的数据是单独存放的.

SQL> DROP TABLE sales;

Table dropped.

SQL> SELECT * FROM sales_mv WHERE ROWNUM< 4;

CALENDAR_YEAR PROD_ID SUM_SALES

------------- ---------- ----------

1998 13 936197.53

1998 26 567533.83

1998 27 107968.24

物化视图可以分区.你可以定义一个物化视图在一个分区表上.以及在物化视图上创建一到多个索引

Refresh Methods forMateralized Views(物化视图的刷新方法)

数据库维护物化视图中数据的方法,就是在master表数据变化以后,将变化刷新到物化视图中.

刷新方法是可以增量的,叫做fast refresh.或者是complete refresh(完整刷新)。

当物化视图初始化且子句是BUILD IMMEDIATE时,会发生complete refresh。除非物化视图引用了预先创建好的表。刷新涉及到执行物化视图定义中的查询。这个处理过程可能很慢,尤其是数据库必须读出和处理大量的数据。

fast refresh消除了从零开始重建物化视图的必要。因此,它仅处理发生的变化,这样非常快的刷新完成。

物化视图可以根据需要或者定时刷新。此外,和master表在同一个数据库中的物化视图,可以在相关基表 事务提交时进行刷新。

为了物化视图可以使用fast refresh 方法。materialized view log或着direct loader log记录了主表的变化。一个materialized view log是一个schema object ,它记录了master表的数据更改,通过它 物化视图可以增量的刷新。每个materialized view log 和一个master表进行关联。materialized view log创建在master table所在的数据库中,所在的schema中。

Query Rewrite(查询重写)

查询重写是一种优化技术,它把用户的对master tables的写请求,转换成意思相同,但包含了对相关物化视图的修改写请求。

当基表包含大量的数据,运算聚集函数或者join是非常昂贵且耗时的。因为物化视图包含的数据是已经计算好的,查询重写可以快速的使用物化视图 对请求进行响应。

CBO查询重写是透明的,无需用户介入,SQL语句中也不需要应用物化视图。

因为查询重写是透明的,物化视图的添加和删除,不会使应用代码中的SQL语句失效。

通常,重写的查询会用物化视图,而不是表,这样减少了响应时间

下图显示了数据库 原始和经过重现的执行计划,然后选择成本最低的执行计划

\

Overview of Sequences(序列的概述)

序列是一个schema object,多个用户可以使用一个序列来产生唯一的整数。

一个序列提供了很好的灵活性以及不错的执行方法 用来产生 一个数值类型的替代主键。

Sequence Characteristics(序列的特征)

一个序列的创建需要提供以下信息:

·序列的名字

·序列是升序还是降序

·每次间隔多大

·数据库是否需要将一部分sequence产生的值 cache到内存中。

·当序列的限制达到时,是否循环

下面的案例创建一个名叫customers_seq的序列。在oe用户下。

一个应用打算使用这个序列来产生雇员编号。

CREATE SEQUENCE customers_seq

START WITH 1000

INCREMENT BY 1

NOCACHE

NOCYCLE;

第一次引用customers_seq.nextval 将返回1000,第二次将返回1001. 每一次引用都比上一次的值大1

Concurrent Access to Sequences(并发访问序列)

一个序列可以为几个不同的表产生数字.这种情况下,数据库可以自动产生主键,以及协调这些跨越了行或者表的键.举个例子:一个序列可以给orders表和customers表产生主键.

多用户环境中,为了产生唯一数字,而且不增加磁盘开销,这时序列是有用的。

举个例子,两个用户同时插入新行到orders表。

通过使用序列来产生order_id列的唯一值,任何一个用户都不需要等待别人输入下一个值。序列会自动产生正确的值,给每个用户。

每个引用序列的用户 都可以访问他或她的当前序列号,这个序列号就是本会话产生的最后一个序列号。一个用户可以使用一个语句来产生新的序列号或者使用当前系列号(本会话最后产生的序列号)

在一个会话中使用语句产生序列号,这个序列号只在这个会话可用。

个别序列号可能会发生跳过现象,这是因为一个事务产生和使用了这个序列号,这个事务最终又回滚掉了。

警告:如果你的应用需要没有间隙的一组数字,那么你不能使用Oracle序列。你必须自己开发代码来实现这连续的行为。

Overview of Dimensions(维度概述)

一个标准的数据仓库有两个重要的组建,维度表和事实表。

一个维度表用于阐述业务问题的类别

举个例子:时间,地理,产品,部门,以及分销渠道

一个事实表 是一组指定的维度的值 相关联的 事件或者实体

举个例子:销售数量或者利润。

多维度需求的例子包括如下:

·以上升聚合方式,在2007到2008年间,在地理维度上从州上升到国家到全球,跨越所有产品的销售额。

·创建一个跨表格的分析。关于2007-2008年间 在南美运营情况,包括所有的可汇总的

·根据 2008年汽车产品销售收入,列出在亚洲的前 10位销售代表,并按其佣金分级。

很多 多维度问题 经常需要跨时间,地区或者预算

首页 上一页 2 3 4 5 6 下一页 尾页 5/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇linux操作系统下完全删除oracle数.. 下一篇Oracle分析表简介

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Redis on AWS:Elast (2025-12-27 04:19:30)
·在 Spring Boot 项目 (2025-12-27 04:19:27)
·使用华为开发者空间 (2025-12-27 04:19:24)
·Getting Started wit (2025-12-27 03:49:24)
·Ubuntu 上最好用的中 (2025-12-27 03:49:20)