1、物化视图的刷新机制林南州武汉大学目录目录l物化视图简介物化视图简介l为什么使用物化视图为什么使用物化视图l物化视图刷新方式物化视图刷新方式l锁机制锁机制l物化视图刷新实现物化视图刷新实现l物化视图刷新示例物化视图刷新示例l重建索引重建索引简介简介物化视图是一个包含实属性的表,但表现上像一个视图原表数据改变时,物化视图中的数据也要跟着改变。快照物化视图快照物化视图(snapshot materialized view)最容易实现,物化视图中的数据需要手动刷新 积极物化视图积极物化视图(Eager materialized view)物化视图在数据库被更新时同步更新 消极物化视图消极物化视图(La
2、zy materialized view)在事务(Transaction)提交时更新 非常消极物化视图非常消极物化视图(Very Lazy materialized view)类似于快照物化视图,区别在于变化都会被增量式地记录下来(changes are recorded incrementally)并在手动刷新时被调用(applied)物化视图类型物化视图类型为什么使用为什么使用在执行某些查询的时候,效率较低,而且使用传统方法(例如,在执行某些查询的时候,效率较低,而且使用传统方法(例如,索引或查询优化)无法显著提高效率索引或查询优化)无法显著提高效率这时使用的方法是将需要查询的数据事先进行
3、查询这时使用的方法是将需要查询的数据事先进行查询(pre-querying)并储存起来,这样每次查询时就不需要都从头执行一次。类似的并储存起来,这样每次查询时就不需要都从头执行一次。类似的“缓存缓存”机制其实就是物化视图机制其实就是物化视图物化视图刷新方式物化视图刷新方式REFRESH MATERIALIZED VIEW CONCURRENTLY table_name WITH NO DATA 物化视图刷新语法:物化视图刷新语法:方式一:方式二:REFRESH MATERIALIZED VIEW table_nameREFRESH MATERIALIZED VIEW CONCURRENTLY
4、table_name物化视图刷新方式物化视图刷新方式REFRESH MATERIALIZED VIEW CONCURRENTLY table_name WITH NO DATA 物化视图刷新语法:物化视图刷新语法:能使用CONCURRENTLY选项的情况:在物化视图上必须首先创建至少一个在物化视图的一个或多个字段上,没有where子句的UNIQUE索引,UNIQUE索引仅使用列名并涵盖所有行;否则会报错在物化视图未被填充时,不能使用该选项;否则会报错物化视图刷新方式物化视图刷新方式REFRESH MATERIALIZED VIEW CONCURRENTLY table_name WITH NO
5、 DATA 物化视图刷新语法:物化视图刷新语法:使用CONCURRENTLY选项 可以在刷新视图时不锁住对该物化视图的查询工作,但在多行受影响时刷新速度会下降;该参数的原理和优缺点与索引的CONCURRENTLY类似,以时间来换取查询锁,刷新的速度会变慢不指定CONCURRENTLY选项时,一次影响很多行的刷新,使用更少的资源并且完成地更迅速,但是会锁定其他试图从该物化视图读数据的连接。该选项在少量行受影响时,可能速度会更快PostgreSQL 锁机制锁机制锁模式说明Access Share只与Access Exclusive锁模式冲突。查询命令(Select command)将会在它查询的表
6、上获取Access Shared锁,一般地,任何一个对表上的只读查询操作都将获取这种类型锁。Row Share与Exclusive和Access Exclusive锁模式冲突。Select for update和Select for share命令将获得这种类型锁,并且所有被引用但没有for update 的表上会加上Access Shared锁。Row Exclusive与Share,Shared Row Exclusive,Exclusive,Access Exclusive模式冲突。Update/Delete/Insert命令会在目标表上获得这种类型的锁,并且在其它被引用的表上加上Acc