首批通过分布式安全可靠测评,为关键业务系统打造
CREATE MATERIALIZED VIEW
更新时间:2026-03-02 11:13:19
描述
该语句用来创建物化视图。
物化视图是一种特殊类型的数据库对象,它存储查询结果的副本,并定期刷新(也可以手动刷新)以保持数据的最新状态。物化视图可以包含聚合,连接和子查询等操作,并且可以被索引和分区,以进一步提高性能。
权限要求
创建物化视图需要有 CREATE TABLE 权限。更多有关 OceanBase 数据库权限的详细介绍,请参见 MySQL 模式下的权限分类。
语法
CREATE MATERIALIZED VIEW view_name [([column_list] [PRIMARY KEY(column_list)])]
[table_option_list]
[partition_option]
[mv_column_group_option]
[refresh_clause]
[query_rewrite_clause]
[on_query_computation_clause]
AS view_select_stmt;
column_list:
column_name [, column_name ...]
refresh_clause:
REFRESH [COMPLETE | FAST | FORCE] [mv_refresh_on_clause]
| NEVER REFRESH
mv_refresh_on_clause:
[ON DEMAND] [[START WITH expr] [NEXT expr]]
query_rewrite_clause:
DISABLE QUERY REWRITE
| ENABLE QUERY REWRITE
on_query_computation_clause:
DISABLE ON QUERY COMPUTATION
| ENABLE ON QUERY COMPUTATION
mv_column_group_option:
WITH COLUMN GROUP(all columns)
| WITH COLUMN GROUP(each column)
| WITH COLUMN GROUP(all columns, each column)
参数说明
说明
在创建物化视图的语句中,不能直接创建索引。您可以使用 CREATE INDEX 语句或者 ALTER TABLE 语句为物化视图创建索引。
| 参数 | 描述 |
|---|---|
| view_name | 指定待创建的物化视图的名称。 |
| column_list | 可选项,指定物化视图的列列表。如果想要为视图列指定明确的名称,可以使用 column_list 子句,并在其中使用逗号分隔的列名。
说明
|
| column_name | 指定物化视图的列名称。缺省情况下,由 SELECT 语句检索的列名将用作视图列名。 |
| PRIMARY KEY | 用于指定物化视图的主键。
注意
|
| table_option_list | 可选项,指定物化视图的表选项。与普通表一样,物化视图可以单独设置 Table Option,更多参数信息,请参见 CREATE TABLE。 |
| partition_option | 可选项,指定物化视图的分区选项。与普通表一样,物化视图可以单独设置分区,更多参数信息,请参见 CREATE TABLE。 |
| mv_column_group_option | 可选项,指定物化视图的存储格式。不指定时,默认创建行存格式的物化视图。详细介绍可参见下文 mv_column_group_option。 |
| refresh_clause | 可选项,指定物化视图的刷新方式。详细介绍可参见下文 refresh_clause。 |
| mv_refresh_on_clause | 可选项,指定物化视图的刷新模式,即刷新时机。详细介绍可参见下文 mv_refresh_on_clause。 |
| query_rewrite_clause | 可选项,指定当前物化视图是否开启自动改写。详细介绍可参见下文 query_rewrite_clause。 |
| on_query_computation_clause | 可选项,指定当前物化视图是否是实时物化视图。详细介绍可参见下文 on_query_computation_clause。 |
| view_select_stmt | 用于定义物化视图数据的查询(SELECT)语句。该语句用于从基表中检索数据,并将结果存储到物化视图中。view_select_stmt 的语法与常规 SELECT 语句相同,语法信息请参见 SELECT 语句。 |
mv_column_group_option
WITH COLUMN GROUP(all columns):指定创建行存储格式的物化视图。WITH COLUMN GROUP(each column):指定创建列存储格式的物化视图。WITH COLUMN GROUP(all columns, each column):指定创建行存列存冗余格式的物化视图。
说明
您可以使用 SHOW CREATE TABLE view_name; 或者 SHOW CREATE VIEW view_name; 命令来查看物化视图的定义,确定物化视图的存储格式。
refresh_clause
REFRESH [FAST | COMPLETE | FORCE] [mv_refresh_on_clause]:表示刷新物化视图的方式。[COMPLETE | FAST | FORCE]:指定物化视图的刷新方式。可选项,如果不指定任何刷新方式默认是FORCE。COMPLETE:表示进行全量刷新,即重新计算整个物化视图的数据,确保视图中的数据与源表完全一致。FAST:表示进行增量刷新,即只刷新与源表变化相关的数据,避免对整个视图进行完全计算。注意
- 由于
REFRESH FAST方法利用物化视图日志中的记录信息来确定需要增量刷新的内容,因此在使用增量刷新刷新物化视图时,需要在创建物化视图之前就创建基表的物化视图日志(mlog)。 - 增量刷新物化视图中使用的列都必须在 mlog 里。
- 由于
FORCE:默认值,表示进行混合刷新,首先尝试增量刷新,如果增量刷新失败,则执行全量刷新。
NEVER REFRESH:指定物化视图不需要刷新。即表示物化视图只在创建时进行刷新,并在创建后不允许再次刷新。
mv_refresh_on_clause
说明
除了使用 mv_refresh_on_clause 子句来定义刷新计划,您还可以通过调用 dbms_mviews.refresh 存储过程来手动刷新物化视图。
ON DEMAND:可选项,表示按需刷新物化视图。[[START WITH expr] [NEXT expr]]:可选项,表示定义刷新间隔。[START WITH expr]:可选项,表示刷新计划开始的时间表达式。[NEXT expr]:可选项,表示下一次刷新的时间表达式。注意
- 如果使用了
NEXT子句,刷新计划的时间表达式必须设定在未来的时间点,否则会引发错误。 - 如果期望物化视图周期性自动调度刷新任务,请通过定义
NEXT来设置调度周期。
- 如果使用了
建议使用 sysdate() 表示当前时区时间,时间表达式示例如下:
START WITH sysdate() NEXT sysdate() + INTERVAL 1 DAY
上述子句表示从当前时间(sysdate())开始,每隔 1 天刷新一次物化视图。
query_rewrite_clause
注意
本功能需要物化视图仅包含 SELECT JOIN 与 WHERE 子句,即 SPJ 查询。对于不满足条件的物化视图,不会报错,但不会被用于改写。
DISABLE QUERY REWRITE:默认值,指定当前物化视图不开启自动改写。ENABLE QUERY REWRITE:指定当前物化视图开启自动改写。
更多物化视图改写的信息,参见 物化视图查询改写。
on_query_computation_clause
DISABLE ON QUERY COMPUTATION:默认值,指定创建普通物化视图。ENABLE ON QUERY COMPUTATION:指定创建实时物化视图。
更多实时物化视图的信息,参见 创建物化视图 中 创建实时物化视图 章节。
示例
创建表
test_tbl1。CREATE TABLE test_tbl1 (col1 INT PRIMARY KEY, col2 VARCHAR(20), col3 INT, col4 INT);创建名为
mv_test_tbl1的物化视图。将物化视图按照col1列进行 Hash 分区,并分为8个分区;使用完全刷新方法来刷新物化视图,从当前日期开始刷新,并每隔1天刷新一次;将test_tbl1表中满足条件col3 >= 30的记录作为基表进行查询,并将查询结果作为物化视图的数据。CREATE MATERIALIZED VIEW mv_test_tbl1 PARTITION BY HASH(col1) PARTITIONS 8 REFRESH COMPLETE START WITH sysdate() NEXT sysdate() + INTERVAL 1 DAY AS SELECT col1, col2, col3 FROM test_tbl1 WHERE col3 >= 30;创建名为
mv2_test_tbl1的物化视图,并指定主键。CREATE MATERIALIZED VIEW mv2_test_tbl1(c1, c2, c3, PRIMARY KEY(c1)) AS SELECT col1, col2, col3 FROM test_tbl1;创建列存格式的物化视图
mv3_test_tbl1。CREATE MATERIALIZED VIEW mv3_test_tbl1 WITH COLUMN GROUP(each column) AS SELECT col1, col2, col3 FROM test_tbl1;查看物化视图
mv3_test_tbl1定义。SHOW CREATE VIEW mv3_test_tbl1;