PostgreSQL物化视图相关操作,materialized view 不阻塞刷新

使用普通视图查询较慢,改用pgsql的物化视图。物化视图和普通视图的区别在于物化视图会将试图内容物理保存在数据库中。

1、创建一个名为mv_memberdetail的物化视图

create materialized view mv_memberdetail as
select m.*,p.diamond_value,p.grade_name,p.orderTotal,p.orderNum
from crm_membership m
inner join(
select membership_id,sum(remain) diamond_value,SUM(money) orderTotal,count(product_number) orderNum,
case when sum(remain)<100 then '黄金'
 when sum(remain)>=100 and sum(remain)<1000 then '铂金'
 when sum(remain)>=1000 then '钻石' else '' end grade_name 
from crm_point_logs
where is_delete=false and point_type='钻石' and status in('0','1','2') 
group by membership_id
) p on m.id=p.membership_id
where m.is_delete=false

2、创建视图索引

create unique index index_mv_memberdetail_id on mv_memberdetail(id);

3、刷新物化视图(会锁住视图,刷新较快)

 refresh materialized view mv_memberdetail;

刷新物化视图(不会锁住视图,刷新速度大幅下降)

refresh materialized view concurrently mv_memberdetail;

刷新物化视图以及CONCURRENTLY的介绍

对物化视图的刷新不阻塞在该物化视图上的并发选择。如果没有这个选项,一次影响很多行的刷新将使用更少的资源并且更快结束,但是可能会阻塞其他尝试从物化视图中读取的连接。这个选项在只有少量行被影响的情况下可能会更快。

只有当物化视图上有至少一个UNIQUE索引(只用列名 并且包括所有行)时,才允许这个选项。也就是说,该索引不能建立在任何 表达式上或者包括WHERE子句。

当物化视图还未被填充时,这个选项不能被使用。

即使带有这个选项,对于任意一个物化视图一次也只能运行一个REFRESH

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值