如果我将查询结果存储为视图,与具有查询结果的表相比,是否会占用更多内存空间?
关于视图的另一个问题是,我可以根据存储为视图的查询结果获得新查询吗?
答案 0 :(得分:6)
视图不存储查询结果,它们存储查询。
某些RDBMS允许存储查询结果的方式(对于某些查询):Oracle
中的实体化视图和{{1}中的索引视图 }}
SQL Server
不支持这些(但是,正如@CalvinCheng所提到的,你可以使用触发器或规则来模拟那些)。
是的,您可以在查询中使用视图。但是,视图只是通过名称引用复杂查询的便捷方式,而不是存储结果的方法。
答案 1 :(得分: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定义了一个适用于指定表或视图的新规则。创建或替换规则将创建新规则或替换 同一个表的同名现有规则。
答案 2 :(得分:0)
PostgreSQL视图是一个保存的查询。创建后,从视图中选择与从原始查询中选择完全相同,每次都返回查询。所以观点不占用记忆。
您无法将查询结果存储为视图,视图只是查询,但您可以使用实体化视图实现类似的功能。物化视图只能按需更新。其次,必须更新整个物化观点;没有办法只更新一个陈旧的行。
因此,在这种情况下,只要发生导致行无效的更改,您就必须急切地更新视图。它可以通过触发器来完成。
答案 3 :(得分:0)
我想指出的是,自Postgres 9.3起,物化视图are supported