mview mv中有一个表t,这是mview定义中唯一的表。
create table t (c1 int, ..., c10 int);
-- there is a pk on say c1 column
create materialized view mv as select c1, c2...c10 from t;
---there is a unique index on say c5 and bunch of other indexes on the mview.
创建mview而不使用表t的原因是,该表每隔几个小时就会被截断并重新加载,并且我们不希望用户在任何时间点看到空表,这就是使用mview的原因
使用“同时刷新实例化视图”,此mview被API和最终用户使用。
我有问题的一对-
答案 0 :(得分:0)
问题1:REFRESH MATERIALIZED VIEW CONCURRENTLY
更新了现有的物化视图,而不是从头开始构建它。这就是为什么它需要唯一索引,以便可以识别行的原因。
问题2:虽然视图可以在刷新时使用,但由于两个操作使用相同的资源(CPU,I / O,内存),因此当然可能会降低性能。
问题3:在没有更多信息的情况下无法回答。物化视图后面的查询在执行时间上是否表现出相同的变化?
问题4:VACUUM
和ANALYZE
,是的。除非您测量不适当的索引膨胀,否则REINDEX
不必要。