物化视图与表格:有什么优势?

set*_*eth 46 sql oracle materialized-views

我很清楚为什么物化视图比查询基表更可取.不仅仅是创建另一个具有与MV相同数据的表的优势还不是很清楚.MV的唯一优势是否只是易于创建/维护?

是不是MV等效于具有匹配模式的表和使用MVs SELECT语句的INSERT INTO?

意思是,您可以按如下方式创建MV

CREATE MATERIALIZED VIEW ... AS
SELECT * FROM FOO;
Run Code Online (Sandbox Code Playgroud)

您可以创建一个等效表:

CREATE TABLE bar (....);
INSERT INTO bar 
SELECT * FROM FOO;
Run Code Online (Sandbox Code Playgroud)

并不是说创造/维护的便利性不足,我只是想确保我没有遗漏任何东西.

Don*_*nie 25

动态查询重写.物化视图不仅定义关系,还允许您预先计算昂贵的连接和聚合.优化器非常智能,即使未在查询中明确使用MV(给定数据库设置等),也可以使用MV来获取相关数据.

你的问题被标记为Oracle,但MSSQL也做了类似的技巧.


Dav*_*sta 12

它们基本相同,但MV有各种自动刷新数据的选项,这不仅提高了维护的便利性,而且在某些情况下还提高了效率,因为它可以按行跟踪更改.


Roo*_*noy 10

可以刷新物化视图 - 它们是定期获取的数据的快照.

你的第二个陈述只是一次性交易 - 当时数据被插入表中.对原始数据的进一步更改不会反映在表中.


KM.*_*KM. 6

物化视图的一大优势是可以非常快速地检索聚合数据,因为它是预先计算和存储的,代价是插入/更新/删除.数据库将使物化视图与实际数据保持同步,无需重新发明轮子,让数据库为您完成.


Ros*_*one 6

  1. 物化视图将与其所依赖的基本关系保持同步.

  2. 如果物化视图是可更新的,则在修改实例化视图时,它还将修改它所依赖的基本关系.

  • 他们真的同步吗?或者我们应该刷新它们以获取最新更改? (3认同)

Sri*_*ake 6

1) 加速写入操作:由于可以在物化视图上创建索引,因此读取速度非常快。请注意,如果您在包含大量写入的表上创建索引,则索引维护开销往往会减慢写入过程。为了避免这种情况,您可以创建一个物化视图并在其上创建索引。这些索引可以在后台维护,不会对表的写操作产生不利影响。

2) 加速读取操作:复杂的连接;通过在物化视图上创建索引可以加快需要很长时间才能运行的数据透视。这在大多数报告场景中变得非常方便。


yuc*_*cer 6

我想正确的比较是:

REFRESH MATERIALIZED VIEW bar;
Run Code Online (Sandbox Code Playgroud)

相对:

CREATE TABLE bar (....);
INSERT INTO bar 
SELECT * FROM FOO;
Run Code Online (Sandbox Code Playgroud)

因为 MV 您可以制作一次,并在需要进行选择时刷新(如果您知道信息更改的频率,甚至可以节省一些调用)

您还可以提供 MV 并对其进行索引,这是其他方式所没有的。当然,这只会有利于 MV 的性能,仅适用于大结果集。

在 postgres 中你也可以这样做:

REFRESH MATERIALIZED VIEW CONCURRENTLY bar;
Run Code Online (Sandbox Code Playgroud)

通过并行进程刷新信息,而不阻塞需要当前信息的查询。我猜想进行了一些优化以重用正在运行的查询中的内容。

这是 SELECT INSERT INTO 无法做到的。


vet*_*yan 0

表和 MV 之间的区别在于,使用表时,您可以执行其他用户可以看到的 DML 操作,而您对 MV 所做的更改将无法提供给其他用户,除非您更新数据库服务器。

MV 还有另一个优点,当您使用复杂查询基于多个表构建 MV 时,用户在使用 MV 时性能会大幅提高。