|
查询重写是一种发生在当一个查询或查询的一部分已经被保存为一个物化视图,转换器重写该查询以使用预先计算好 的物化视图数据而不需要执行当前查询的转换。物化视图与普通视图的区别在于查询已经被执行并将结果集存入了一张表中。
Eg:
(1)没有建立物化视图的执行计划:
SELECT p.prod_id,
p.prod_name,
t.time_id,
t.week_ending_day,
s.channel_id,
s.promo_id,
s.cust_id,
s.amount_sold
FROM sh.sales s, sh.products p, sh.times t
WHERE s.time_id = t.time_id
AND s.prod_id = p.prod_id
执行计划:
(2)建立物化视图
create materialized view sales_time_product_mv
enable query rewrite as
SELECT p.prod_id,
p.prod_name,
t.time_id,
t.week_ending_day,
s.channel_id,
s.promo_id,
s.cust_id,
s.amount_sold
FROM sh.sales s, sh.products p, sh.times t
WHERE s.time_id = t.time_id
AND s.prod_id = p.prod_id;
--3查询物化视图
select query from user_mviews where lower(mview_name) like '%sales_time_product_mv%'
--4还有物化视图的查询
SELECT /*+rewrite(sales_time_product_mv)*/
p.prod_id,
p.prod_name,
t.time_id,
t.week_ending_day,
s.channel_id,
s.promo_id,
s.cust_id,
s.amount_sold
FROM sh.sales s, sh.products p, sh.times t
WHERE s.time_id = t.time_id
AND s.prod_id = p.prod_id;
执行计划如下:
总结:可以看出Oracle中的物化视图对于大量的数据查询效益是很显著的。
|
|
|