您的位置:首页 > 其它

物化视图,索引,数据仓库

2009-10-28 23:24 274 查看
http://www.os2ora.com/materialized-view-index-data-warehousing/

Materialized Views, 其实不是View。我觉得把它归类于Index可能还准确一些。

View在我们的印象里总是逻辑存在的。即使前面加上一个Materialized,我们只会觉得奇怪,干嘛要对View进行物化呢?

把它理解为一种特殊的Index未尝不可,况且,它与Index有一些相同点:

They consume storage space.

They must be refreshed when the data in their master tables changes.

They improve the performance of SQL execution when they are used for query rewrites.

Their existence is transparent to SQL applications and users.

而一般的View呢?

They don’t consume storage space.

They don’t need to be refreshed when the data in their master tables changes.

They don’t improve the performance of SQL execution, database just maps the View to the underlying Table when executing.

Their existence is transparent to SQL applications and users.

不过,Materialized View为什么特殊,我觉得在于它的应用场合——数据仓库。或许我们可以说,Materialized View 是专门用于数据仓库的Index。

问题在于,数据仓库场合和OLTP场合对Index的要求有哪些不同,干嘛需要一个专门的Materialized View?

数据仓库的查询一般都是”大”查询。何谓大?多表联合(n个大表join在一起),多维度分析(一长串的group by),聚合统计(avg, count, sum,rank,cube)。

数据库如何跑这种查询呢?硬件方面,用更多的CPU和硬盘;软件方面,采用数据分区,并行执行。软硬件一起提供的厂商,如Oracle的Exadata, Teradata, Netezza, 可能做到数据库软件与硬件的紧密结合,从而实现对数据的智能扫描(在IO这一层实现对不需要数据的过滤)等技术。

这种做法可以很好地应对数据仓库里一类重要的查询:随机查询。例如,某位领导突然想到了一个决策方案,开发人员必须为这种决策提供分析数据。

另一方面,如果某类“大”查询经常被执行,我们就得想办法对其进行优化了。最直接的方法就是缓存中间结果,多表连接的结果,多维度分析的结果,聚合统计的结果,对了,这就是Materialized View的用武之地了。

Materialized View缓存了中间结果,Oracle通过Query Rewrite的技术把对基表的访问转换成对Materialized View的访问。这个对性能的提高可以是成千上万倍的。

如何创建Materialized View以便让Query Rewrite用到,这也许是Materialized View里面最重要的部分,也是理解Query Rewrite如何工作的一个途径。最好的参考文献当然是Oracle的Oracle® Database Data Warehousing Guide.

以后的文章再回来看看Query Rewrite的实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: