WEB开发网
开发学院数据库Oracle 高速高效 创建物化视图提高查询速度 阅读

高速高效 创建物化视图提高查询速度

 2007-05-13 12:29:11 来源:WEB开发网   
核心提示: 对于采用可信信息(包括维度)的查询改写,初始化参数QUERY_ REWRITE_INTEGRITY必须被设置为TRUSTED,高速高效 创建物化视图提高查询速度(4),如下所示:ALTER SESSION SET query_rewrite_integrity = TRUSTED;例如,假

对于采用可信信息(包括维度)的查询改写,初始化参数QUERY_ REWRITE_INTEGRITY必须被设置为TRUSTED,如下所示:

ALTER SESSION SET query_rewrite_integrity = TRUSTED;

例如,假设有一个时间维度,其声明如下:  CREATE DIMENSION time_dim
  LEVEL time_key IS time.time_key
  LEVEL month IS time.month
  LEVEL quarter IS time.quarter
  LEVEL year IS time.year
  HIERARCHY calendar_rollup (
  time_key CHILD OF
  month  CHILD OF
  quarter CHILD OF
  year
  )
  
  ATTRIBUTE time_key determines (day_of_week, holiday)
  ATTRIBUTE month  determines (month_name);

现在,如果具有清单 4中要求按年的销售额的查询,你仍然可以使用monthly_sales_mv物化视图,因为维度对象中的HIERARCHY子句告诉Oracle数据库月销售额可以积累成年销售额。它利用前面描述的joinback技巧由物化视图中的“月”列得到“年”列的值。

代码清单 4:通过joinback和HIERARCHY获得销售总额  SELECT t.year, p.category, SUM(ps.purchase_price) as sum_of_sales
  FROM time t, product p, purchases ps
  WHERE t.time_key = ps.time_key AND
  
  ps.product_id = p.product_id
  GROUP BY t.year, p.category;
  
  Id  Operation            Name
  
  __________________________________________________
  0  SELECT STATEMENT
  1   SORT GROUP BY
  2   HASH JOIN
  
  3    HASH JOIN
  
  4    VIEW
  5     SORT UNIQUE
  6     TABLE ACCESS FULL     TIME
  7    MAT_VIEW REWRITE ACCESS FULL MONTHLY_SALES_MV
  8    TABLE ACCESS FULL       PRODUCT

维度的ATTRIBUTE子句指明了一对一关系。例如,你可以判定从time_key开始是一周中的哪一天。假设你希望得到每年1月份的销售总额:你仍然可以使用清单 5中所示的monthly_sales_mv物化视图。注意该查询的WHERE子句如何具有一个在物化视图中没有出现的选择条件。

代码清单 5:通过joinback和ATTRIBUTE获得销售总额  SELECT t.year, p.category, SUM(ps.purchase_price) as sum_of_sales
  FROM time t, product p, purchases ps
  WHERE t.time_key = ps.time_key AND
  
  ps.product_id = p.product_id AND
  t.month_name = 'January'
  
  GROUP BY t.year, p.category;
  
  Id  Operation            Name
  __________________________________________________
  0  SELECT STATEMENT
  1   SORT GROUP BY
  
  2   HASH JOIN
  
  3    HASH JOIN
  4    VIEW
  5     SORT UNIQUE
  6     TABLE ACCESS FULL     TIME
  7    MAT_VIEW REWRITE ACCESS FULL MONTHLY_SALES_MV
  8   TABLE ACCESS FULL       PRODUCT

如果优化器并未如期改写一个查询,可以使用DBMS_MVIEW .EXPLAIN_REWRITE 过程来诊断该问题。这一特性出现在Oracle9i数据库及以后的版本中。

上一页  1 2 3 4 

Tags:高速 高效 创建

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