博客园 首页 联系 订阅 管理

视图合并:是一种能将内嵌或者存储式视图展开为能够独立分析或者与查询剩余部分合并成总体执行计划的独立查询模块的转换。

视图合并发生包括下列条件:1 能够在另一个查询块的索引中使用的列。

                                    2 能够在另一个查询块的分区截断中所使用的列。

                                    3 在一个联接视图中能够限制返回行数的条件。

Eg:

(1)

SELECT e1.last_name, e1.salary, v.avg_salary
FROM hr.employees e1,
(SELECT department_id, avg(salary) avg_salary
FROM hr.employees e2
GROUP BY department_id) v
WHERE e1.department_id = v.department_id AND e1.salary > v.avg_salary;--0.109秒

 

(2)

SELECT /*+ MERGE(v) */ e1.last_name, e1.salary, v.avg_salary
FROM hr.employees e1,
(SELECT department_id, avg(salary) avg_salary
FROM hr.employees e2
GROUP BY department_id) v
WHERE e1.department_id = v.department_id AND e1.salary > v.avg_salary;--0.094秒

并不是任何使用视图的查询语句都会进行视图合并,在视图中出现以下操作时不能进行视图合并:
    Set operators(union,union all,intersact,minus)
    Aggregation(avg,count,max,min,sum)
    Rownum
    Connect by
    Group by(隐藏参数_complex_view_merging为true时,可能合并)
    Distinct(隐藏参数_complex_view_merging为true时,可能合并)