金仓数据库KingbaseES 物化视图
关键字:
物化视图
物化视图概述
物化视图是数据库中的一种对象,它存储了查询的结果,并定期刷新以保持数据的最新状态。与普通视图不同,物化视图的将数据存储在数据库中,从而提高查询性能,特别是在涉及大量数据和复杂查询的情况下。物化视图反映的是某个查询的结果或者是中间结果,其本身是会存储数据的,当数据量比较小时可以存储在内存,但数据量比较大的时候就会存储在磁盘上。物化视图主要用于预先计算并保存比较耗时的操作的结果,比如表连接或者聚集操作等。使用物化视图可以避免重复进行耗时的操作,从而提升查询性能。
物化视图的使用场景
(1)、物化视图用于在OLAP(在线分析与处理)领域,是用于加速时效性要求不高的长时间复杂查询。
(2)、物化视图支持建立索引以加快查询速度。
(3)、基表数据更新不频繁,但是表的操作或者连接操作比较耗时,使用比较频繁。
(4)、查询中使用外部数据库的表,扫描该表会比较慢,可以通过物化视图将外部数据库表数据存储起来(需要手动刷新物化视图)。
物化视图的缺点
(1)、不支持通过CREATE OR RERPLACE语法重建物化视图。
(2)、重建只能先删除再重建。
(3)、删除以后,该视图上所有的索引都会丢失。
(4)、KES不支持物化视图自动更新和增量更新
(5)、每次刷新数据时都要执行一次REFRESH MATERIALIZED VIEW操作
(6)、要想实现自动刷新,必须使用类似crontab、pgAgent定时任务或者是触发器。
所以如果原始表的数据更新比较频繁,物化视图刷新比较慢的情况下,不适合使用物化视图。所以最终是否需要使用物化视图,需要结合具体的场景决定。
物化视图的基本操作
基本语法:
# \h CREATE MATERIALIZED VIEW 命令:CREATE MATERIALIZED VIEW 说明: 建立新的物化视图 语法: CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] 表名 [ (列名称 [, ...] ) ] [ USING 方法 ] [ WITH ( 存储参数 [= 值] [, ... ] ) ] [ TABLESPACE 表空间的名称 ] AS 查询 [ WITH [ NO ] DATA ] |
建立物化视图:
create materialized view my_materialized AS SELECT * FROM km_user; |
在物化视图上建立索引:
create unique index my_materialized_username_index on my_materialized(username); |
刷新物化视图:
REFRESH MATERIALIZED VIEW concurrently my_materialized; |
聚簇物化视图:
cluster my_materialized using my_materialized_username_index; |
删除物化视图:
drop materialized view my_materialized; |