视图是数据库管理系统中最重要的概念。在面试中,这是一个流行且常见的问题,很像截断与删除、相关、相关与非相关子查询,或主键与唯一键。本教程将了解视图和物化视图之间的区别。
原始表存储在数据库的物理内存中。我们可以通过运行查询来访问所有属性。但有时,我们不得不限制用户从表中获取一些数据,并且只允许他们获取允许的属性。假设我们有一个学生表,用户可以搜索学生姓名、分数、分支、年龄和其他关于学生的信息。但不得允许用户获取学生的手机号码和地址。
在这种情况下,创建一个可以显示表所需属性的数据的视图是一个好方法。我们可以通过创建虚拟表或视图以及物化视图来实现这样的功能。
让我们了解视图的概念。
什么是视图?
视图是充当实际关系的数据库的虚拟表。它不是数据库系统的逻辑关系模型的一部分。它们是使用选择查询创建的,但结果不存储在物理内存中。每次我们向视图发起查询时,视图都会从原始表中返回更新的和最新的数据。这意味着每次访问视图时都会生成视图。在此视图中,查询定义存储在数据库本身中。我们可以根据需要创建任意数量的视图。
关键是要记住,当我们对虚拟表进行任何更改时,它都会反映在原始表中。如果我们对原始表或基表进行任何更改,这些更改将反映在视图中。这使得查询性能非常缓慢。例如 – 我们从另外两个表的连接中创建一个视图。在这种情况下,我们必须在每次尝试获取数据时解析连接并创建它们。
但是,它提供了一些优点,例如它不需要内存来存储数据。我们可以使用以下语法创建视图。
语法 –
Create view as <select query expression>
视图的优势
以下是视图的一些重要优点 –
- 视图可以只是包含大量数据的基表,可以根据数据要求定义一个虚拟表。
- 可以通过连接多个表之一轻松定义视图。
- 视图可以隐藏数据的复杂性。
- 视图可以限制底层表对外部世界的暴露程度。
物化视图是什么?
物化视图也称为虚拟表,但查询表达式的结果保存在物理内存中。查询定义也存储在数据库中。我们也可以将它们视为原始基表的物理副本。它主要用于数据仓库的上下文中。 SQL 中没有定义物化视图的标准视图。然而,很少有数据库管理系统提供自定义扩展来使用物化视图。与普通视图不同,它们不会在每次使用时更新。相反,我们需要手动或在触发器的帮助下更新它。更新物化视图的过程称为物化视图维护。
它将结果存储在物理内存中,它比普通视图响应更快,因为每当我们运行查询时都会创建普通视图。主要用于数据的汇总、预计算、复制和分发等。让我们了解物化视图的语法:
Create Materialized View view_name Build [clause] Refresh [ type] ON [trigger ] As <query expression>
在上述语法中,Build 子句决定何时填充物化视图。 它包含两个选项 –
IMMEDIATE
– 它立即填充物化视图。DEFFERED
– 需要至少手动刷新一次实体化视图。
刷新类型定义了如何更新物化视图,有三种选择——:
FAST
– 物化视图日志需要提前针对源表,没有日志,创建失败。 尝试快速刷新,尝试快速刷新。COMPLETE
– 支持物化视图的表段被截断并使用关联查询完全重新填充。FORCE
– 不需要物化日志,尝试快速刷新。
On trigger 定义何时更新物化视图。刷新可以通过两种方式触发 –
ON COMMIT
– 当数据更改提交到依赖表之一时,刷新被触发。ON DEMAND
– 当安排任务或手动请求时会发生刷新。
我们已经讨论了普通视图和物化视图的基本概念。 现在,让我们看看普通视图和物化视图之间的区别。
物化视图的优点
以下是物化视图的一些重要优点:
- 物化视图优化了查询性能,每次使用相同的子查询结果。
- 物化视图中的数据更新不频繁,用户需要手动更新数据或使用触发子句。 它减少了任何错误的机会并返回有效的结果。
- 物化视图是透明的,并在雪花的帮助下自动维护,雪花是一种后台服务。
视图和物化视图的区别
以下是视图和物化视图之间的重要区别 –
编号 | 视图 | 物化视图 |
---|---|---|
1 | 视图是基表的虚拟投影。查询表达式存储在数据库中,但不存储查询表达式的结果数据。 | 结果数据和查询表达式都保存在物理内存(数据库系统)中。 |
2 | 视图一般是通过连接一个或多个表来创建的。 | 物化视图主要用于数据仓库。 |
3 | 视图是基于选择查询的虚拟表它也称为数据的快照视图 | 它提供对单独表中重复的物理数据的访问。 |
4 | 使用多表创建的DML命令不能使用。 | DML 命令可以在物化视图中使用,无论它们是如何创建的。 |
5 | 普通视图不涉及更新成本。 | 它确实有与之相关的更新成本。 |
6 | 浏览量反应慢。它会导致查询性能。 | 物化视图响应更快。因为它将数据存储在数据库中。 |
7 | 视图是根据基于定义视图的 SQL 标准的固定设计架构方法定义的。 | 没有预定义的 SQL 标准来定义它,数据库以扩展的形式提供功能。 |
8 | 当数据访问不频繁,表中数据更新频繁时,视图更有效。 | 物化视图多用于数据访问较频繁且数据更新不频繁的情况。 |
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/264161.html