物化视图与视图的区别

2024 年 8 月 29 日 | 阅读 6 分钟

视图是数据库管理系统中最重要的概念之一。在面试中,这是一个很受欢迎且常见的问题,类似于TRUNCATE与DELETE、相关子查询与非相关子查询,或者主键与唯一键。本教程将学习视图和物化视图之间的区别。

原始表存储在数据库的物理内存中。我们可以通过运行查询来访问所有属性。但有时,我们必须限制用户从表中获取某些数据,并允许他们只获取允许的属性。假设我们有一个学生表,用户可以搜索学生姓名、分数、专业、年龄等学生信息。但用户不允许获取学生的手机号码和地址。

在这种情况下,创建一个视图来显示表中所需属性的数据是一个好方法。我们可以通过创建虚拟表或视图和物化视图来实现这样的功能。

让我们来理解视图的概念。

什么是视图?

视图是数据库的虚拟表,它起着实际关系的作用。它不是数据库系统的逻辑关系模型的一部分。它们是使用SELECT查询创建的,但结果不存储在物理内存中。每次我们向视图执行查询时,视图都会返回原始表中的更新和最新数据。这意味着视图在每次访问视图时都会生成。在此视图中,查询定义存储在数据库本身中。我们可以创建任意数量的视图。

要记住的一点是,当我们对虚拟表进行任何更改时,这些更改都会反映在原始表中。如果我们对原始表或基表进行任何更改,这些更改都会反映在视图中。这使得查询性能非常慢。例如,我们从两个或多个表的连接创建了一个视图。在这种情况下,我们必须解析连接,并在每次尝试获取数据时重新创建它们。

然而,它提供了一些优点,例如它不需要内存来存储数据。我们可以使用以下语法创建视图。

语法 -

注意 - 使用DISTINCT子句、GROUP BY子句、CHECK约束、只读选项创建的视图不能被修改。

视图的优点

以下是一些视图的重要优点。

  • 视图可以简化包含大量数据的基表。我们可以根据数据需求定义虚拟表。
  • 视图可以轻松地通过连接一个或多个表来定义。
  • 视图可以隐藏数据的复杂性。
  • 视图可以限制其底层表向外部世界的暴露程度。

什么是物化视图?

物化视图也称为虚拟表,但查询表达式的结果保存在物理内存中。查询定义也存储在数据库中。我们也可以认为它们是原始基表的物理副本。它主要用于数据仓库的上下文。SQL中没有标准的视图来定义物化视图。然而,一些数据库管理系统提供了自定义扩展来使用物化视图。与普通视图不同,它们不会在每次使用时更新。相反,我们需要手动更新它,或借助触发器。更新物化视图的过程称为物化视图维护。

它将结果存储在物理内存中,它的响应速度比普通视图快,因为普通视图在每次运行查询时都会创建。它主要用于汇总、预计算、复制和分发数据等。

让我们来理解物化视图的语法。

在上面的语法中,Build子句决定何时填充物化视图。它包含两个选项 -

  • IMMEDIATE - 它会立即填充物化视图。
  • DEFFERED - 需要至少手动刷新一次物化视图。

Refresh type 定义了如何更新物化视图。有三个选项 -

  • FAST - 物化视图需要提前在源表上创建日志,没有日志,创建会失败。会尝试快速刷新。会尝试快速刷新。
  • COMPLETE - 支持物化视图的表段被截断,并使用关联的查询完全重新填充。
  • FORCE - 不需要物化日志。会尝试快速刷新。

On trigger 定义了何时更新物化视图。刷新可以通过两种方式触发 -

  • ON COMMIT - 当其中一个依赖表中的数据更改被提交时。触发刷新。
  • ON DEMAND - 当我们安排任务或手动请求时,会发生刷新。

我们已经讨论了普通视图和物化视图的基本概念。现在,让我们看看普通视图和物化视图之间的区别。

物化视图的优点

以下是物化视图的一些重要优点。

  • 物化视图通过每次使用相同的子查询结果来优化查询性能。
  • 物化视图中的数据不会频繁更新,用户需要手动更新数据或使用触发器子句。这减少了任何错误的发生概率,并返回高效的结果。
  • 物化视图是透明的,并通过雪花(一种后台服务)自动维护。

视图与物化视图的区别

以下是视图和物化视图之间的一些重要区别。

序号。视图 (View)物化视图
1.视图是基表的虚拟投影。查询表达式存储在数据库中,但查询表达式的结果数据不存储。查询表达式和结果数据都保存在物理内存(数据库系统)中。
2.视图通常是通过连接一个或多个表来创建的。物化视图主要用于数据仓库。
3.视图是一个基于SELECT查询的虚拟表。它也称为数据的快照视图,它在单独的表中提供对重复的、物理数据的访问。
4.如果视图是使用多个表创建的,则不能使用DML命令。无论如何创建物化视图,都可以使用DML命令。
5.普通视图不涉及更新成本。它确实有相关的更新成本。
6.视图响应缓慢。它会影响查询性能。物化视图响应更快。因为它在数据库中存储数据。
7.视图是根据固定的设计架构方法定义的,该方法基于定义视图的SQL标准。没有预定义的SQL标准来定义它,数据库以扩展的形式提供该功能。
8.当数据不频繁访问且表中的数据频繁更新时,视图更有效。当数据频繁访问且数据不频繁更新时,物化视图使用得更多。

结论

视图在数据检索中起着至关重要的作用。在本教程中,我们介绍了视图和物化视图的定义以及它们的一些重要优点。我们已经用合适的示例定义了这两种视图。在这里,您可以理解这两种视图之间的主要区别,并根据您的需求进行选择。