视图,物化视图,普通表区别简介
普通视图与物化视图的主要区别:
-
数据存储方式:
- 普通视图:不存储数据,仅包含查询定义。查询时,Oracle会根据视图的定义转换为相应的SQL语句去查询底层数据。
- 物化视图:实际存储数据,类似于物理表。它将查询结果预先计算并存储起来,查询时直接访问这些存储的数据。
-
性能影响:
- 普通视图:可能降低性能,因为每次查询都需要重新执行定义的SQL。
- 物化视图:可以提高查询性能,因为数据已经预先存储和计算。
-
数据更新:
- 普通视图:数据总是最新的,因为它是实时查询底层数据。
- 物化视图:数据可能不是实时的,需要根据设定的刷新策略(ON DEMAND或ON COMMIT)来更新。
-
使用场景:
- 普通视图:适用于数据模型设计、简化复杂查询、提供数据安全性等。
- 物化视图:适用于数据仓库和OLAP系统,特别是在需要频繁查询且不要求实时数据的情况下。
-
创建和维护:
- 普通视图:创建简单,不需要额外的维护。
- 物化视图:创建复杂,需要考虑刷新策略和存储空间,需要定期维护。
-
索引支持:
- 普通视图:不能直接在视图上创建索引。
- 物化视图:可以在物化视图上创建索引,进一步优化查询性能。
-
删除操作:
- 普通视图:可以直接删除。
- 物化视图:需要使用特定的DROP语句来删除。
总结来说,普通视图主要用于简化SQL编写和提供数据安全性,而物化视图则用于优化查询性能,特别是在数据分析和报告等场景中。两者在数据库中的作用和用途有显著不同。
物化视图和表
最大区别是物化视图不支持 INSERT、UPDATE、DELETE 以及 MERGE 语句,
只能通过刷新物化视图进行数据的更新。
物化视图通过提前运行并存储查询结果,通常用于查询优化、数据仓库、数据集成等场景。
另外,有些数据库,比如老版本的PostgreSQL 不支持物化视图的实时更新,因此物化视图中的数据通常不是最新数据。