高速高效 创建物化视图提高查询速度
2007-05-13 12:29:11 来源:WEB开发网对于采用可信信息(包括维度)的查询改写,初始化参数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数据库及以后的版本中。
- ››创建SQL2005自动备份,定期删除的维护计划
- ››创建动态表单 javascript
- ››创建基于PPTP的站点到站点VPN连接:ISA2006系列之...
- ››创建基于L2TP的站点到站点的VPN连接:ISA2006系列...
- ››创建一个Twisted Reactor TCP服务器
- ››高效开发与彻底测试
- ››创建Windows Mobile上兼容性好的UI 程序
- ››创建android的Service
- ››创建远古部落环境与原住民角色
- ››创建并扩展Apache Wicket Web应用
- ››创建不在任务条中显示窗口按钮的应用
- ››创建 Android 文件系统(Root file system)
更多精彩
赞助商链接