一、定义
视图是一种虚拟表,一个视图看起来像是一个表,但实际上它并不存储任何数据。视图是从一个或多个表中选择特定的列构成的。每当从视图中查询数据时,查询语句就会把查询条件转化为一个对基本表的查询,对表的数据进行过滤,然后返回结果。
CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
物化视图是一个已经计算的表,可以看作是一个数据表的静态快照。物化视图会将基表中的数据结果存储到磁盘上,并在物化视图上建立索引,这样查询物化视图就像查询一张普通的表一样。物化视图是对数据库中表的数据的拷贝,和普通表一样,物化视图中的数据在物理上实际保存在磁盘上,而不是在计算机的内存中。
CREATE MATERIALIZED VIEW view_name
REFRESH [FAST | COMPLETE | FORCE] [ON DEMAND | ON COMMIT | EVERY interval]
AS SELECT column1, column2, ...
FROM table_name
WHERE condition;
二、性能
视图只是一个查询,数据仍然存储在基本表中,每次查询都需要重新计算结果集。相对而言,物化视图就像是一个快照,存储了一份物化视图中的查询结果集,每次查询都不需要重新计算结果集。
当查询条件相对简单、计算量小,选择使用视图,速度较快;当查询数据量大、计算量大,可以先使用物化视图计算出结果集,然后查询物化视图加速查询。
三、维护
每次查询视图时,都需要重新计算结果集,对于较大的数据集,这个计算代价非常大,且随着数据量的增加,性能将会下降。相对而言,物化视图在创建后,每次查询都不需要重新计算结果集,对于定期发生查询的情况,可以大大提升查询性能。
然而,由于物化视图是一份静态的结果集,所以当基表发生更新时,视图中的内容并不会自动发生变化,必须手动更新物化视图。因此,物化视图的维护成本比较高,需要把控好数据同步的时机,并定期更新物化视图。
四、压缩
视图本身并不会占用数据库磁盘空间,也不需要进一步额外的存储空间管理。而物化视图生成后会占用磁盘空间,且随着数据量以及复杂度的增加,占用的空间也会相应增加。虽然物化视图中的数据可以针对某些列进行压缩,但需要注意压缩空间和查询效率之间的平衡问题。
五、更新
视图是对基表数据的虚拟表,通过视图查询的结果是基于基表动态计算得到的,并不需要像物化视图一样手动更新。因此,任何对基表的更新操作都会在视图查询结果集中反映出来。
物化视图是一个静态结果集,和普通的基本表一样,可以对视图中的数据进行增、删、改等操作,但如果不手动更新物化视图,物化视图中的数据不会自动发生变化。
六、应用场景
视图通常用于过滤、组合、转换数据以及简化查询语句等领域,对于小数据集、计算简单的查询,使用视图可以快速得到结果。
物化视图则适用于:计算耗时的查询;复杂的数据集计算;以物化视图结果为基础的大量联查;数据仓库中的数据统计等场景。
七、总结
Oracle物化视图和视图都是查询结果的容器,不过物化视图存储静态查询结果,而视图是动态计算得到查询结果。视图不需要额外的管理,但无法加快查询速度,而物化视图可以加速查询,但管理和维护成本相对较高。在应用的时候,需要根据实际需求选择适当的容器。
原创文章,作者:SNNHH,如若转载,请注明出处:https://www.506064.com/n/371861.html