在网络上搜索和物化视图相关的内容,出来的百分之九十是用户自己创建物化视图的相关语法。看了一些相关文献,把一些知识点记录一下,仅供参考,如有地方不对,敬请指正。
物化视图分类
根据物化视图创建的方式不同,可以将其分为:
(1)常见的物化视图。这是用户自定义的。使用符合对应数据库的创建物化视图语法,即可生成。例如:
create materialized view 物化视图的名称 as select...(SQL语句);
//还可以加一些其他的参数,例如刷新的模式指定等等。
(2)系统(数据库管理系统DBMS)自动创建的物化视图。
①第一类是系统收集历史的查询集来创建对应的物化视图,然后再随着查询的交互逐渐加入一些新的物化视图,这种方法相当于要进行初始化,在未完成物化视图的构建时,不进行交互。有种说法称为热启动(类似于系统要热一下身);
②第二类是,初始时,存储物化视图的空间是空的,随着查询的交互逐渐按照预定的结构加入新的物化结果,这是一个从无到有的过程,称冷启动。
方式①和方式②区别就在于:
热启动在初始化时占用系统的开销比较大,但是创建完成之后即可回答查询,命中率高;
冷启动在初始时是空的,不占用系统太多开销,命中率随着交互的查询越多,从0开始逐渐升高。
物化视图存储
由于物化视图的占用空间较大,一般是存储在磁盘上的;
随着内存技术的发展,现有的某些技术可以选择将物化视图存储在内存或缓存上;
也有一些数据库将部分物化视图存在内存上,部分物化视图存在缓存上。
一般,系统中物化视图的占用空间不会超过系统空间的10%-20%。
物化视图应用
现有的商业数据库中大部分都有系统自动创建物化视图的功能,但绝大多数开源数据库是没有系统自动创建物化视图的这部分功能的。
物化视图的核心问题
(1)物化视图选择问题
这个问题被证明为NP-hard问题。即选择什么样的视图去物化?
目前的研究中,可以根据选择模型的不同大致分为以下几类:
MVPP(materialized view processing plan),主要对SPJ(select-project-join)查询。
And-or view
数据立方体格
现有的研究都是针对以上方法进行改进。同时,随着研究的深入选择视图物化的依据也从简单的线性成本模型变得越来越复杂。
(2)物化视图维护问题
数据库的一大特性就是一致性,即保持数据的一致性。因为基本表会进行新增或删除操作,所以基于基本表的查询结果数据也要同步更新,以保证物化视图结果的正确性。
现有的物化视图更新方法分为:
①全量更新。即根据最新的基本表数据重新生成物化视图;
②增量更新。追踪基本表的修改日志,得到增量的更新数据,加入到物化视图中。
有些数据库分得更细,比如定时更新、周期性更新、提交触发更新等方式。归根结底,核心方法还是以上的①②。
(3)物化视图使用问题
创建了物化视图,如何使用它来回答查询?
这就涉及到一种技术——查询匹配和查询改写技术。对用户新提交的查询进行物化视图匹配,现有研究将匹配结果分为三种:
①完全匹配。即直接可以用物化视图返回查询结果。
②部分匹配。即物化视图的结果只能回答一部分查询。这时,有的技术会对查询进行改写,改写为探测查询——物化视图能回答的部分;剩余查询——物化视图不能回答的部分,这部分查询交给数据库去基本表回答。最后将两部分结果合并提交给用户。
③无关匹配。即物化视图不能回答查询,直接去数据库基本表进行回答。