Oracle数据库建物化视图与数据表的区别?

Oracle数据库建物化视图与数据表的区别?,第1张

“物化视图”(Materialized views)是一种特殊的存在, 虽然物化视图本质上也是一张表, 这张表是对别的表或查询的数据映射,而且这些映射数据真实存在 , 是在表的数据的基础上又存了一份数据。

这样做的目的是为了 针对特殊的查询做优化,例如 经常有查询要对一张大表做分组查询:

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必知必会


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6695695.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-26
下一篇 2023-03-26

发表评论

登录后才能评论

评论列表(0条)

保存