Oracle物化视图与视图的区别

一、定义

视图是一种虚拟表,一个视图看起来像是一个表,但实际上它并不存储任何数据。视图是从一个或多个表中选择特定的列构成的。每当从视图中查询数据时,查询语句就会把查询条件转化为一个对基本表的查询,对表的数据进行过滤,然后返回结果。

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
SNNHHSNNHH
上一篇 2025-04-23 18:08
下一篇 2025-04-23 18:08

相关推荐

  • Python中new和init的区别

    new和init都是Python中常用的魔法方法,它们分别负责对象的创建和初始化,本文将从多个角度详细阐述它们的区别。 一、创建对象 new方法是用来创建一个对象的,它是一个类级别…

    编程 2025-04-29
  • Sublime Test与Python的区别

    Sublime Text是一款流行的文本编辑器,而Python是一种广泛使用的编程语言。虽然Sublime Text可以用于编写Python代码,但它们之间有很多不同之处。接下来从…

    编程 2025-04-29
  • Shell脚本与Python脚本的区别

    本文将从多个方面对Shell脚本与Python脚本的区别做详细的阐述。 一、语法差异 Shell脚本和Python脚本的语法存在明显差异。 Shell脚本是一种基于字符命令行的语言…

    编程 2025-04-29
  • 如何将Oracle索引变成另一个表?

    如果你需要将一个Oracle索引导入到另一个表中,可以按照以下步骤来完成这个过程。 一、创建目标表 首先,需要在数据库中创建一个新的表格,用来存放索引数据。可以通过以下代码创建一个…

    编程 2025-04-29
  • Python中while语句和for语句的区别

    while语句和for语句是Python中两种常见的循环语句,它们都可以用于重复执行一段代码。然而,它们的语法和适用场景有所不同。本文将从多个方面详细阐述Python中while语…

    编程 2025-04-29
  • Web程序和桌面程序的区别

    Web程序和桌面程序都是进行软件开发的方式,但是它们之间存在很大的区别。本文将从多角度进行阐述。 一、运行方式 Web程序运行于互联网上,用户可以通过使用浏览器来访问它。而桌面程序…

    编程 2025-04-29
  • TensorFlow和Python的区别

    TensorFlow和Python是现如今最受欢迎的机器学习平台和编程语言。虽然两者都处于机器学习领域的主流阵营,但它们有很多区别。本文将从多个方面对TensorFlow和Pyth…

    编程 2025-04-28
  • Unity运行模式下Scene视图无法拖拽的解决方法

    解决Unity在运行模式下,无法使用鼠标拖拽Scene视图的问题,有以下几个方法。 一、场景模式和运行模式的区别 首先我们需要了解场景模式和运行模式的区别。 场景模式下,我们可以自…

    编程 2025-04-28
  • 麦语言与Python的区别

    麦语言和Python都是非常受欢迎的编程语言。它们各自有自己的优缺点和适合的应用场景。本文将从语言特性、语法、生态系统等多个方面,对麦语言和Python进行详细比较和阐述。 一、语…

    编程 2025-04-28
  • MySQL bigint与long的区别

    本文将从数据类型定义、存储空间、数据范围、计算效率、应用场景五个方面详细阐述MySQL bigint与long的区别。 一、数据类型定义 bigint在MySQL中是一种有符号的整…

    编程 2025-04-28

发表回复

登录后才能评论