Oracle数据库11g新特性:数据仓库和OLAP
2008-12-16 13:01:34 来源:WEB开发网当用户查询与 MV 的定义查询类似时将会发生查询重写。在过去的版本中,如果查询不想死,将不会重写查询。但在 Oracle 数据库 11g 中,这些规则将更加宽松。请看如下所示的 MV:
create materialized view mv4
enable query rewrite
as
select prod_id, cust_id, avg (rate) tot_qty
from (select s.prod_id, cust_id, amount_sold / quantity_sold rate
from sales s, products p
where s.prod_id = p.prod_id) sq
group by prod_id, cust_id
/
它使用内联查询,行源实际上是另一个查询(FROM 中的子句实际上是内联查询)。如果您写入一个与 MV 的定义查询类似的查询(使用同一个内联视图),现在您将看到正在发生重写。使用 AUTOTRACE 检查执行路径。
SQL> alter session set query_rewrite_enabled = true;
Session altered.
SQL> alter session set query_rewrite_integrity = stale_tolerated;
Session altered.
SQL> set autotrace traceonly explain
SQL> select pid, cid, avg(item_rate) avg_item_rate
2 from (select s.prod_id pid, cust_id cid, amount_sold/quantity_sold item_rate
3 from sales s, products p
4 where p.prod_id = s.prod_id)
5 group by cid, pid;
Execution Plan
----------------------------------------------------------
Plan hash value: 3944983699
-------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 287K| 10M| 226 (2)| 00:00:03 |
| 1 | MAT_VIEW REWRITE ACCESS FULL| MV4 | 287K| 10M| 226 (2)| 00:00:03 |
-------------------------------------------------------------------------------------
Note
-----
- dynamic sampling used for this statement
注意上面 Id=1 的情况;查询使用我们之前创建的物化视图 MV4 进行了重写。即使 MV 和查询使用了内联视图(或子查询),也会发生查询重写。
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
- ››Oracle数据库在配置文件中更改最大连接数
- ››Oracle中在pl/sql developer修改表的两种方式
更多精彩
赞助商链接