WEB开发网
开发学院数据库Oracle Oracle 10g R2特性之数据仓库和集成特性 阅读

Oracle 10g R2特性之数据仓库和集成特性

 2006-11-18 11:59:41 来源:WEB开发网   
核心提示: 注意,查询是如何从物化视图 MV_HOTEL_RESV 而非表 HOTELS 和 RESERVATIONS 中进行选择的,Oracle 10g R2特性之数据仓库和集成特性(5),这正是您所需要的,同样,唯一的救济就是创建另一个将所有三个表连接在一起的 MV,但该方法将导致 MV 的增多,

注意,查询是如何从物化视图 MV_HOTEL_RESV 而非表 HOTELS 和 RESERVATIONS 中进行选择的。这正是您所需要的。同样,当您编写一个查询来汇总每个预订编号的实际价格时,将使用物化视图 MV_ACTUAL_SALES 而非表 TRANS。

我们来采用一个不同的查询。如果要查明每个城市的实际销售额,则将发出select city, sum(actual_rate)
from hotels h, reservations r, trans t
where t.resv_id = r.resv_id
and r.hotel_id = h.hotel_id
group by city;

注意此查询结构:从 MV_ACTUAL_SALES 中,您可以获得 RESV_ID 和预订的总销售额。从 MV_HOTEL_RESV 中,您可以获得 CITY 和 RESV_ID。

您能将这两个 MV 连接在一起吗?当然可以,但在 Oracle 数据库 10g 第 2 版之前,查询重写机制只使用两个 MV 中的一个(而非两个)自动重写用户查询。

以下是 Oracle9i 数据库中的执行计划输出。您可以看到,只使用了 MV_HOTEL_RESV 和 TRANS 的整表扫描。Execution Plan
----------------------------------------------------------
0   SELECT STATEMENT Optimizer=ALL_ROWS (Cost=8 Card=6 Bytes=120)
1  0  SORT (GROUP BY) (Cost=8 Card=6 Bytes=120)
2  1   HASH JOIN (Cost=7 Card=516 Bytes=10320)
3  2    MAT_VIEW REWRITE ACCESS (FULL) OF 'MV_HOTEL_RESV' (MAT_VIEW REWRITE) 
(Cost=3 Card=80 Bytes=1040)
4  2    TABLE ACCESS (FULL) OF 'TRANS' (TABLE) 
(Cost=3 Card=516 Bytes=3612)

即使 MV 可用,该方法也将生成一个非最优的执行计划。唯一的救济就是创建另一个将所有三个表连接在一起的 MV。但该方法将导致 MV 的增多,从而大大增加刷新 MV 所需的时间。

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:Oracle 特性 数据

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