如果我将查询结果存储为视图,与带有查询结果的表相比,它是否会占用更多的内存空间?
关于视图的另一个问题是,我可以根据存储为视图的查询结果进行新查询吗?
如果我将查询结果存储为视图,与带有查询结果的表相比,它是否会占用更多的内存空间?
关于视图的另一个问题是,我可以根据存储为视图的查询结果进行新查询吗?
视图不存储查询结果,它们存储查询。
一些RDBMS允许Oracle
存储查询结果(对于某些查询):这在.SQL Server
PostgreSQL
不支持那些(尽管,正如@CalvinCheng 提到的,您可以使用触发器或规则来模拟那些)。
是的,您可以在查询中使用视图。但是,视图只是通过名称引用复杂查询的便捷方式,而不是存储其结果的方式。
对于问题 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 将创建一个新规则,或者替换同一个表的同名现有规则。
我想指出,从 Postgres 9.3 开始,支持物化视图
PostgreSQL 视图是一个保存的查询。创建后,从视图中选择与从原始查询中选择完全相同,每次都返回查询。所以视图不会占用内存。
您不能将查询结果存储为视图,视图只是查询,但您可以使用物化视图实现类似的功能。物化视图仅按需更新。其次,必须更新整个物化视图;没有办法只更新一个陈旧的行。
因此,在这种情况下,每当发生会使行无效的更改时,您都必须急切地更新视图。它可以通过触发器来完成。