WEB开发网
开发学院数据库Oracle Oracle数据库中物化视图的原理剖析 阅读

Oracle数据库中物化视图的原理剖析

 2007-05-13 12:27:48 来源:WEB开发网   
核心提示:物化视图 (MV)在一个段中存储查询结果,并且能够在提交查询时将结果返回给用户,Oracle数据库中物化视图的原理剖析,从而不再需要重新执行查询 — 在查询要执行几次时(这在数据仓库环境中非常常见),这是一个很大的好处,下面是一个例子,因为第一个参数是一个 OUT 参数,物化视图可以利用一个快速刷新机制从基

物化视图 (MV)在一个段中存储查询结果,并且能够在提交查询时将结果返回给用户,从而不再需要重新执行查询 — 在查询要执行几次时(这在数据仓库环境中非常常见),这是一个很大的好处。物化视图可以利用一个快速刷新机制从基础表中全部或增量刷新。

假定您已经定义了一个物化视图,如下:

  create materialized view mv_hotel_resv
  refresh fast
  enable query rewrite
  as
  select distinct city, resv_id, cust_name
  from hotels h, reservations r
  where r.hotel_id = h.hotel_id';

您如何才能知道已经为这个物化视图创建了其正常工作所必需的所有对象?在 Oracle 数据库 10g 之前,这是用 DBMS_MVIEW 程序包中的 EXPLAIN_MVIEW 和 EXPLAIN_REWRITE 过程来判断的。这些过程(在 10g 中仍然提供)非常简要地说明一种特定的功能 — 如快速刷新功能或查询重写功能 — 可能用于上述的物化视图,但不提供如何实现这些功能的建议。相反,需要对每一个物化视图的结构进行目视检查,这是非常不实际的。

在 10g 中,新的 DBMS_ADVISOR 程序包中的一个名为 TUNE_MVIEW 的过程使得这项工作变得非常容易:您利用 IN 参数来调用程序包,这构造了物化视图创建脚本的全部内容。该过程创建一个顾问程序任务 (Advisor Task),它拥有一个特定的名称,仅利用 OUT 参数就能够把这个名称传回给您。

下面是一个例子。因为第一个参数是一个 OUT 参数,所以您需要在 SQL*Plus 中定义一个变量来保存它。  SQL> -- 首先定义一个变量来保存 OUT 参数
  SQL> var adv_name varchar2(20)
  SQL> begin
  2 dbms_advisor.tune_mview
   3   (
  4    :adv_name,
  5    'create materialized view mv_hotel_resv
  refresh fast enable query rewrite as
  select distinct city, resv_id, cust_name from hotels h,
     reservations r where r.hotel_id = h.hotel_id');
  6* end;

1 2  下一页

Tags:Oracle 数据库 物化

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接