视图合并是指优化器不在将view部分当做一个独立的处理单元来单独执行,而是会将其拆开,把其定义sql语句中的基表拿出来与外部查询中的表进行合并。(相反存在/*+materized*/)。
oracle数据库中视图合并分为3种类型,简单视图合并,外连接视图合并,复杂视图合并。
简单视图:不包含外连接,视图定义不包含distinct、group by 、聚合函数等的视图。
简单视图合并条件:该视图sql中不包含集合运算符(UNION\UNION ALL\ INTERSECT\MINUS),CONNECT BY 语句、rownum等。
SQL> create view view1 as select object_id,object_name from t1;
View created.
SQL> create view view2 as select object_id,object_name from t1 where rownum<1000;
SQL> select * from t2,view1 t where t.object_name=t2.table_name;
SQL> select * from t2,view2 t where t.object_name=t2.table_name;
外连接视图合并
外连接视图合并是指使用了外连接。以及定义sql不包含distinct、group by等聚合函数的sql视图合并。
合并条件:外连接视图作为驱动表,或者被驱动表时视图定义的基表只能包含一个表。