Oracle中的物化视图?

时间:2013-09-27 06:16:31

标签: sql oracle oracle11g oracle10g

Oracle中的物化视图是什么?有什么用?我在网上搜索了这个主题,但我无法清楚地了解它。那么请您用一个明确的例子来解释这个主题。因此,对我来说,清楚地理解这个主题会更有用。

3 个答案:

答案 0 :(得分:7)

物化视图是RDMS提供的机制,用于交换额外的存储消耗以获得更好的查询性能。

例如,假设您有一个非常大的查询,其中有10个表连接需要很长时间才能返回数据。如果将查询转换为物化视图,此查询的结果将自动实现到磁盘上的特殊数据库表中,更好的是,随着行的添加/更新/删除,它们会自动反映出来在物化视图中。

这个方便工具的权衡是对底层表的插入和更新速度较慢。物化视图是Oracle恕我直言的少数救赎品质之一。

以下是两个表连接MATERIALIZED VIEW的示例。

CREATE MATERIALIZED VIEW MV_Test
  NOLOGGING
  CACHE
  BUILD IMMEDIATE 
  REFRESH FAST ON COMMIT 
  AS
    SELECT V.*, P.*, V.ROWID as V_ROWID, P.ROWID as P_ROWID, (2+1) as Calc1, 'Constant1' as Const1
    FROM TPM_PROJECTVERSION V
         INNER JOIN TPM_PROJECT P ON P.PROJECTID = V.PROJECTID

现在,您不必每次都运行相同的查询,而只是针对新视图运行这个更简单的查询,这将更快地运行。非常酷的是你也可以添加派生和计算的列。

SELECT * FROM MV_Test WHERE ...

P.S。

MATERIALIZED VIEWS不是灵丹妙药,如果您的查询速度非常慢,并且经常使用大量连接,并且读取数量远超过写入,则使用它们。

答案 1 :(得分:1)

一个(近乎)现实世界的例子。

假设您被要求开发一个企业范围的实时库存报告,该报告将在企业的所有仓库中输出库存总值。

然后,您需要创建一个

的查询
  1. 总结存储在按项目和仓库分组的库存交易表中的所有交易
  2. 将总和与存储每单位度量的当前价格的表格相结合
  3. 每个仓库再次总结
  4. 在企业中,这样的查询需要数小时才能完成(即使是中型公司也可能有数十万种不同的项目),并且其性能会随着时间的推移而恶化(想象这个查询运行超过5年的数据)。

    因此,您可以将相同(或多或少)的查询编写为物化视图。创建时,oracle将使用查询结果填充表(将其视为隐藏表),然后,每次将事务提交到清单时,都将更新与此特定项有关的记录。如果商品的价格发生变化,它将更新其价值。通常,基础表的每个更改都会立即反映在物化视图中。然后,您的报告将在非常合理的时间运行。

    最重要的是,通过使用GROUPING BY和GROUPING,您可以在同一物化视图上获得不同级别的钻孔。

    但请记住,这是一个理想化的例子。在实践中,ON COMMIT(即,与基础表同时更新matierialized视图)可能会在您经常更新表创建物化视图时出现问题(并且通常是库存事务),您可以根据具体情况编写,中级MV以提升性能。每5分钟刷一次这样的观点是一个可行的选择。

    MV是一个非常强大的功能,但您需要小心使用它们。

答案 2 :(得分:0)

  

什么是物化视图?

     

物化视图是单个目标母版的副本   时间点。主设备可以是主设备的主表   物化视图站点上的站点或主物化视图。   而在多主机复制表中不断更新   其他主站点,物化视图从一个或多个更新   通过单个批量更新(称为刷新)来掌握   单个主站点或主物化视图站点,如图所示   图3-1。图3-1中的箭头表示数据库链接。

- http://docs.oracle.com/cd/A97630_01/server.920/a96567/repmview.htm

示例 - 为employees表创建物化视图。刷新可以设置为首选项,因此请阅读上面链接中的文档。

CREATE MATERIALIZED VIEW employee_mv
REFRESH FORCE
BUILD IMMEDIATE 
ON DEMAND
AS
SELECT * FROM employees

物化视图也只能包含数据子集

CREATE MATERIALIZED VIEW employee_mv
REFRESH FORCE
BUILD IMMEDIATE 
ON DEMAND
AS
SELECT name, ssn, address FROM employees