2007-02-05

如何才能使用查询改写提高查询性能

来源: 本站收集整理 作者:佚名 评论 0 条
   

现在,假如具有清单 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数据库及以后的版本中。


共3页: 上一页 [1] [2] 3 下一页
(本文仅表明作者个人观点,不代表本站及其管理员立场.) 推荐 收藏 投稿 打印 返回 关闭
上一篇:老生常谈:关于分页查询和性能问题  
下一篇:多语言网站开发 不完全技术分析收录
    评论加载中…
 推荐文章
     

网站首页  -  网站地图 -   站长论坛  -  网站投稿  -    -  网站管理
Copyright © 2008 芜湖站长站 All Rights Reserved 皖ICP备07500611号