6

如果我将查询结果存储为视图,与带有查询结果的表相比,它是否会占用更多的内存空间?

关于视图的另一个问题是,我可以根据存储为视图的查询结果进行新查询吗?

4

4 回答 4

7

视图不存储查询结果,它们存储查询。

一些RDBMS允许Oracle存储查询结果(对于某些查询):这在.SQL Server

PostgreSQL不支持那些(尽管,正如@CalvinCheng 提到的,您可以使用触发器或规则来模拟那些)。

是的,您可以在查询中使用视图。但是,视图只是通过名称引用复杂查询的便捷方式,而不是存储其结果的方式。

于 2012-11-13T09:54:02.793 回答
3

对于问题 1

要回答您的第一个问题,您不能将查询结果存储为视图,但您可以使用 PostgreSQL 的功能实现类似的trigger功能。

PostgreSQL 支持views本地创建但不支持创建materialized views(存储结果的视图)——但这可以使用触发器来处理。请参阅http://wiki.postgresql.org/wiki/Materialized_Views

视图不占用 RAM(“内存”)。

对于问题 2

要回答第二个问题,要更新 postgresql 中的视图,您需要使用CREATE RULE- http://www.postgresql.org/docs/devel/static/sql-createrule.html

CREATE RULE 定义了应用于指定表或视图的新规则。CREATE OR REPLACE RULE 将创建一个新规则,或者替换同一个表的同名现有规则。

于 2012-11-13T10:08:53.313 回答
1

我想指出,从 Postgres 9.3 开始,支持物化视图

于 2019-12-12T23:11:44.427 回答
0

PostgreSQL 视图是一个保存的查询。创建后,从视图中选择与从原始查询中选择完全相同,每次都返回查询。所以视图不会占用内存。

您不能将查询结果存储为视图,视图只是查询,但您可以使用物化视图实现类似的功能。物化视图仅按需更新。其次,必须更新整个物化视图;没有办法只更新一个陈旧的行。

因此,在这种情况下,每当发生会使行无效的更改时,您都必须急切地更新视图。它可以通过触发器来完成。

于 2015-12-24T19:49:47.977 回答