物化视图
是预先存储或“物化”为模式对象的查询结果
。
查询的
FROM
子句可以命名表、视图或物化视图。
物化视图通常在复制中充当主表,在数据仓库中充当事实表。物化视图汇总、计算、复制和分发数据。它们适用于各种计算环境,例如:
在数据仓库中,物化视图可以计算和存储聚合函数(如总和和平均值)生成的数据。
摘要是一种聚合视图,它通过预先计算联接和聚合操作并将结果存储在表中来减少查询时间。物化视图等同于摘要。您还可以使用物化视图计算包含或不包含聚合的联接。
在使用XStream和Oracle GoldenGate实现的物化视图复制中,视图包含来自单个时间点的表的完整或部分副本。物化视图在分布式站点复制数据,并同步在多个站点执行的更新。这种复制形式适用于数据库不总是连接到网络的环境,如现场销售。
在移动计算环境中,物化视图可以将数据子集从中央服务器下载到移动客户端,并定期从中央服务器刷新,客户端将更新传播到中央服务器。
在复制环境中,物化视图与另一个数据库(称为主数据库)中的表共享数据。主站点上与物化视图关联的表是主表。图4-8显示了一个数据库中基于另一个数据库主表的物化视图。主表的更新复制到物化视图数据库。
Materialized View
物化视图的特征
物化视图共享索引和非物化视图的一些特征。
物化视图在以下方面类似于索引:
它们包含实际数据并消耗存储空间。
当它们的主表中的数据发生变化时,它们可以被刷新。
当用于查询重写操作时,它们可以提高 SQL 执行的性能。
它们的存在对 SQL 应用程序和用户是透明的。
物化视图类似于非物化视图,因为它表示其他表和视图中的数据。
与索引不同,用户可以直接使用
SELECT
语句查询物化视图。
根据所需的刷新类型,还可以使用 DML 语句更新视图。
以下示例基于
sh
示例架构中的三个主表创建并填充物化聚合视图:
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, sales s
WHERE t.time_id = s.time_id
AND p.prod_id = s.prod_id
GROUP BY t.calendar_year, p.prod_id;
下面的示例删除表
sales
,这是一个主表
sales_mv
,然后查询
sales_mv
。
该查询选择数据,因为行与主表中的数据分开存储(具体化)。
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
可以对物化视图进行分区。
您可以在分区表上定义实体化视图,并在实体化视图上定义一个或多个索引。
待续,,,,