这样做的目的是为了 针对特殊的查询做优化,例如 经常有查询要对一张大表做分组查询:
select col1,count(*) from 大表 group by col1
此时可以基于上述查询做一个物化视图,那么只要该视图刷新数据,那么 对应的查询可以直接利用到该物化视图的数据,而不需要每一次查询都真的去对数据表做分组。
askmaclean oracle
1、关系视图:Oracle视图是作为数据库对象存在的,因此,创建之后也可以通过工具或数据字典来查看视图的相关信息。
2、内嵌视图:在from语句中的可以把表改成一个子查询,内嵌视图为子查询的一种,可以与数据表、视图一样作为查询语句的数据源存在,但在形式上有较大的区别,内嵌视图不必使用create view命令进行创建,因此,在数据字典中也无法获得相应信息。
内嵌视图的特点在于无须创建真正的数据库对象,而只是封装查询,因此会节约数据库资源,同时不会增加维护成本。但是内嵌视图不具有可复用性,因此当预期将在多处调用到同一查询定义时,还是应该使用关系视图。
3、对象视图:对象类型在数据库编程中有许多好处,但有时,应用程序已经开发完成。为了迎合对象类型而重建数据表是不现实的。对象视图正是解决这一问题的优秀策略。
对象视图创建之后,同样可以在数据字典中获得其相应信息。利用Oracle内置视图user_views可以获得对象视图相关信息。Oracle中的对象数据实际仍然以关系数据的形式存储。
但是,对象的特性,例如继承、封装等,都为开发人员提供了更加灵活的处理形式。同样,可以构造复杂的对象类型来封装复杂的多表查询。
4、物化视图:常用于数据库的容灾,不是传统意义上虚拟视图,是实体化视图,和表一样可以存储数据、查询数据。主备数据库数据同步通过物化视图实现,主备数据库通过data link连接,在主备数据库物化视图进行数据复制。当主数据库垮掉时,备数据库接管,实现容灾。
扩展资料
视图可以使应用程序和数据库表在一定程度上独立。如果没有视图,应用一定是建立在表上的。有了视图之后,程序可以建立在视图之上,从而程序与数据库表被视图分割开来。视图可以在以下几个方面使程序与数据独立:
1、如果应用建立在数据库表上,当数据库表发生变化时,可以在表上建立视图,通过视图屏蔽表的变化,从而应用程序可以不动。
2、如果应用建立在数据库表上,当应用发生变化时,可以在表上建立视图,通过视图屏蔽应用的变化,从而使数据库表不动。
3、如果应用建立在视图上,当数据库表发生变化时,可以在表上修改视图,通过视图屏蔽表的变化,从而应用程序可以不动。
4、如果应用建立在视图上,当应用发生变化时,可以在表上修改视图,通过视图屏蔽应用的变化,从而数据库可以不动。
参考资料来源:百度百科-数据库视图
参考资料来源:百度百科-视图
说得比较全面:https://www.cnblogs.com/nmap/p/6724849.html
视图:一张虚拟表,封装了底层与数据表的接口,相当于一张表或多张表的数据结果集。视图包括行和列,类似一个真实的表。
物化视图:物化视图是一种特殊的物理表,物化(materialize)视图相对普通视图而言进行定义的。
普通视图:虚拟表,应用局限比较大,任何对视图的查询,oracle实际转换为视图SQL语句的查询。
视图一般分为普通视图和物化视图,物化视图与普通视图区别在于:
1、物化视图需要进行刷新才会更新数据
2、物化视图实际存储数据,普通视图只是定义了sql实际数据还是需要查询源表
3、物化视图可以创建索引
create materialized view [if not exists] table_name
[(column_name[,...])]
[with (storage_parameter[=value][,...])]
[tablespace tablespace_name]
as query
[with [NO] DATA]
本质:在sql查询语句的基础上封装了视图VIEW,基于SQL语句的结果集形成一张虚拟表。
比如刷视图: refresh materialized view f_feature_detail
修改视图一般是对原有视图进行更新
DROP VIEW view_name
一个视图其实是SELECT语句的集合,执行时会提前编译好,可以反复使用。在底层执行顺序的时候和SELECT语句是一样:
1、FROM子句组装数据
2、WHERE子句进行条件筛选
3、GROUP BY分组
4、使用聚集函数进行计算;
5、HAVING筛选分组;
6、计算所有的表达式;
7、SELECT 的字段;
8、ORDER BY排序
9、LIMIT筛选
参考极客时间:SQL必知必会
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)