物化视图

Page content

[TOC]

总结一下目前项目用到的技术点。

物化视图(Materialized View)

本文主要介绍什么是物化视图。

普通视图

我们都知道什么是视图。视图是根据基表查询结果建立一个虚拟表,有隐藏查询复杂性,保证数据安全等优点。但有时由于查询过于复杂,以及数据量等原因,使用视图查询会有效率的瓶颈出现。

这时如何进一步优化查询效率呢?

物化视图

物化视图是一个选择。

在计算机科学中,物化视图是一个数据库对象,它包含查询的结果。

例如它可以是远程数据的一份本地拷贝,也可以是表或者关联查询结果子集的部分行或者列,也可是聚合函数的查询结果。

创建物化视图的过程叫做物化(Materialzation),这是缓存查询结果的一种形式。,类似于缓存或者记忆化,或者提前计算。

在数据库中使用物化视图,通常是出于效率原因,是一种优化。

在关系型数据库中普通的视图是一种虚拟(virtual)表,而物化视图是将视图的查询结果缓存(cached)到了具体(concrete/materialized)表中。这种方式也是有代价的,因为物化视图的数据可能会过期。

物化视图常用于数据仓库(Data Warehose),在数仓中查询基表可能很耗时。

在物化视图中,可以在任意列上建立索引。相反,在普通的视图中是无法做到的,只能依赖于基表。

支持物化视图的数据库

支持物化视图的数据库:

  • Oracle
 CREATE MATERIALIZED VIEW MV_MY_VIEW
REFRESH FAST START WITH SYSDATE
   NEXT SYSDATE + 1
     AS SELECT * FROM <table_name>;
  • PostgreSQL

  • SQL Server

  • 流处理框架

Kafka, Spark都支持流式数据的物化视图

  • MySQL 并不支持物化视图,但实现物化视图可以基于存储过程和触发器或者Flexviews

总结

物化视图是在查询效率上以空间换时间思想。使用时要根据业务应用场景考虑到数据时效性,设置合理的更新频率,在时效性和查询效率达到平衡。

参考