赞
踩
使用普通视图查询较慢,改用pgsql的物化视图。物化视图和普通视图的区别在于物化视图会将试图内容物理保存在数据库中。
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
create unique index index_mv_memberdetail_id on mv_memberdetail(id);
refresh materialized view mv_memberdetail;
刷新物化视图(不会锁住视图,刷新速度大幅下降)
refresh materialized view concurrently mv_memberdetail;
CONCURRENTLY
的介绍对物化视图的刷新不阻塞在该物化视图上的并发选择。如果没有这个选项,一次影响很多行的刷新将使用更少的资源并且更快结束,但是可能会阻塞其他尝试从物化视图中读取的连接。这个选项在只有少量行被影响的情况下可能会更快。
只有当物化视图上有至少一个UNIQUE
索引(只用列名 并且包括所有行)时,才允许这个选项。也就是说,该索引不能建立在任何 表达式上或者包括WHERE子句。
当物化视图还未被填充时,这个选项不能被使用。
即使带有这个选项,对于任意一个物化视图一次也只能运行一个REFRESH
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。