---
title: "CREATE MATERIALIZED VIEW - OceanBase 数据库 V4.3.5 | OceanBase 文档中心"
description: CREATE MATERIALIZED VIEW 描述 该语句用来创建物化视图。 物化视图是一种特殊类型的数据库对象，它存储查询结果的副本，并定期刷新（也可以手动刷新）以保持数据的最新状态。物化视图可以包含聚合，连接和子查询等操作，并且可以被索引和分区，以进一步提高性能。 权限要求 创建物化视图需要有 CREATE …
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.3.5 LTS

# CREATE MATERIALIZED VIEW

更新时间：2026-07-15 20:42:46

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.3.5/zh-CN/700.reference/500.sql-reference/100.sql-syntax/300.common-tenant-of-oracle-mode/900.sql-statement-of-oracle-mode/100.ddl-of-oracle-mode/1750.create-materialized-views-of-oracle-mode-in-sql.md)  

## 描述

该语句用来创建物化视图。

物化视图是一种特殊类型的数据库对象，它存储查询结果的副本，并定期刷新（也可以手动刷新）以保持数据的最新状态。物化视图可以包含聚合，连接和子查询等操作，并且可以被索引和分区，以进一步提高性能。

## 权限要求

创建物化视图需要有 `CREATE TABLE` 权限。更多有关 OceanBase 数据库权限的详细介绍，请参见 [Oracle 模式下的权限分类](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016087)。

## 语法

```sql
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 [refresh_option [nested_refresh_option]] [ON DEMAND | COMMIT | STATEMENT] [[START WITH expr] [NEXT expr]]
    | NEVER REFRESH

refresh_option:
    COMPLETE
    | FAST
    | FORCE

nested_refresh_option:
    INDIVIDUAL
    | INCONSISTENT
    | CONSISTENT

query_rewrite_clause:
    [ENABLE | DISABLE] QUERY REWRITE

on_query_computation_clause:
    [ENABLE | DISABLE] 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](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002017423) 语句。

| **参数** | **描述** |
| --- | --- |
| view_name | 指定待创建的物化视图的名称。 |
| column_list | 可选项，指定物化视图的列列表。如果想要为视图列指定明确的名称，可以使用 column_list 子句，并在其中使用逗号分隔的列名。   #### 说明    - 视图必须具有唯一的列名，不得有重复，就像基表一样。缺省情况下，视图的列名将使用 `SELECT` 语句中检索的列名。 - 在 `column_list` 中指定的列名数量必须与 `SELECT` 语句中检索的列数相同。 |
| column_name | 指定物化视图的列名称。缺省情况下，由 `SELECT` 语句检索的列名将用作视图列名。 |
| PRIMARY KEY | 用于指定物化视图的主键。   #### 注意    - 如果未指定物化视图的列名称，那么在物化视图的主键中所使用的列名应与 `SELECT` 语句所检索的列名相同。 - 当为物化视图指定列名称时，列名称的列表末尾与 `PRIMARY KEY` 定义之间应以英文逗号进行分隔。 |
| table_option_list | 可选项，指定物化视图的表选项。与普通表一样，物化视图可以单独设置 Table Option，更多参数信息，请参见 [CREATE TABLE](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002017447)。 |
| partition_option | 可选项，指定物化视图的分区选项。与普通表一样，物化视图可以单独设置分区，更多参数信息，请参见 [CREATE TABLE](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002017447)。 |
| mv_column_group_option | 可选项，指定物化视图的存储格式。不指定时，默认创建行存格式的物化视图。详细介绍可参见下文 [mv_column_group_option](#mv_column_group_option)。 |
| refresh_clause | 可选项，指定物化视图的刷新方式和时机。支持 `COMPLETE`（全量刷新）、`FAST`（增量刷新）或 `FORCE`（自动选择）方式，以及 `ON DEMAND`（按需）、`COMMIT`（提交时）或 `STATEMENT`（语句执行时）的刷新时机。可以使用 `START WITH` 和 `NEXT` 子句设置自动刷新的开始时间和间隔。详细介绍可参见下文 [refresh_clause](#refresh_clause)。 |
| query_rewrite_clause | 可选项，指定是否启用查询重写功能。使用 `ENABLE QUERY REWRITE` 或 `DISABLE QUERY REWRITE`。详细介绍可参见下文 [query_rewrite_clause](#query_rewrite_clause)。 |
| on_query_computation_clause | 可选项，指定是否启用查询计算功能。使用 `ENABLE ON QUERY COMPUTATION` 或 `DISABLE ON QUERY COMPUTATION`。详细介绍可参见下文 [on_query_computation_clause](#on_query_computation_clause)。 |
| view_select_stmt | 用于定义物化视图数据的查询（`SELECT`）语句。该语句用于从基表中检索数据，并将结果存储到物化视图中。`view_select_stmt` 的语法与常规 `SELECT` 语句相同，语法信息请参见 [SIMPLE SELECT](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002017919)。   #### 说明    对于 OceanBase 数据库 V4.3.5 版本：    - 从 V4.3.5 BP2 版本开始支持外表作为物化视图的基表来创建全量刷新物化视图。 - 从 V4.3.5 BP4 版本开始支持在创建物化视图时对基表添加 `AS OF PROCTIME()` 子句，若在创建物化视图基表位置之外的地方使用了 `AS OF PROCTIME()` 则会报错。`AS OF PROCTIME()` 用于指定增量刷新时跳过这张表的刷新，并且 `AS OF PROCTIME()` 的表可以不创建 mlog。 - 从 V4.3.5 BP5 版本开始支持普通视图声明为维度表（`AS OF PROCTIME()`）时，可以作为增量刷新物化视图的基表。 |

### 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;` 命令来查看物化视图的定义，确定物化视图的存储格式。
 - OceanBase 数据库 Oracle 模式也支持使用 `SELECT DBMS_METADATA.GET_DDL('MATERIALIZED_VIEW','view_name') FROM DUAL;` 查看物化视图的定义。

### refresh_clause

- `REFRESH [refresh_option [nested_refresh_option]] [ON DEMAND | COMMIT | STATEMENT] [[START WITH expr] [NEXT expr]]`：表示刷新物化视图的方式。

     - `refresh_option`：指定物化视图的刷新方式。可选项，如果不指定任何刷新方式默认是 `FORCE`。取值如下：

           - `COMPLETE`：表示进行全量刷新，即重新计算整个物化视图的数据，确保视图中的数据与源表完全一致。
           - `FAST`：表示进行增量刷新，即只刷新与源表变化相关的数据，避免对整个视图进行完全计算。

            #### 注意

                   - 由于 `REFRESH FAST` 方法利用物化视图日志中的记录信息来确定需要增量刷新的内容，因此在使用增量刷新刷新物化视图时，需要在创建物化视图之前就创建基表的物化视图日志（mlog）。
                   - 增量刷新物化视图中使用的列都必须在 mlog 里。有关创建物化视图日志的信息，请参见 [创建物化视图日志](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002017422)。
           - `FORCE`：默认值，表示进行混合刷新，首先尝试增量刷新，如果增量刷新失败，则执行全量刷新。
           - `nested_refresh_option`：指定嵌套物化视图的刷新策略。可选项，如果不指定刷新策略时，默认为 `INDIVIDUAL`。取值如下：

                   - `INDIVIDUAL`：默认值，表示独立刷新。
                   - `INCONSISTENT`：表示级联非一致性刷。
                   - `CONSISTENT`：表示级联一致性刷新。  

            #### 说明

                   - 对于 OceanBase 数据库 V4.3.5 版本，从 V4.3.5 BP3 版本开始支持参数 `nested_refresh_option`（指定嵌套物化视图的刷新策略）。
                   - 对于非嵌套物化视图来说，不存在级联刷新行为，无论指定为何种刷新策略均无意义，都默认独立刷新。指定的三种刷新策略只在后台任务生效，当手动使用 PL 包（[DBMS_MVIEW.REFRESH](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016439)）调度刷新，按照指定的 PL 参数执行刷新。
     - `[ON DEMAND | COMMIT | STATEMENT]`：指定物化视图的刷新时机。

           - `ON DEMAND`：按需刷新，需要使用 `DBMS_MVIEW.REFRESH` 过程手动刷新或通过 `START WITH`/`NEXT` 子句设置自动刷新计划。
           - `COMMIT`：在基表提交事务时自动刷新物化视图。
           - `STATEMENT`：在包含基表 DML 语句的事务提交时自动刷新物化视图。
     - `[START WITH expr]`：可选项，指定物化视图首次自动刷新的时间。
     - `[NEXT expr]`：可选项，指定物化视图自动刷新的时间间隔。
 - `NEVER REFRESH`：指定物化视图不需要刷新。即表示物化视图只在创建时进行刷新，并在创建后不允许再次刷新。

### query_rewrite_clause

- `[ENABLE | DISABLE] QUERY REWRITE`：指定是否启用查询重写功能。
     - `ENABLE QUERY REWRITE`：启用查询重写，允许优化器使用物化视图来重写查询。
     - `DISABLE QUERY REWRITE`：默认值，禁用查询重写。

#### 注意

- 本功能需要物化视图仅包含 `SELECT JOIN` 与 `WHERE` 子句，即 SPJ 查询。对于不满足条件的物化视图，不会报错，但不会被用于改写。
 - OceanBase 数据库 Oracle 模式下，创建支持改写的物化视图时必须指定刷新方式（`refresh_clause`）。

更多物化视图改写的信息，参见 [物化视图查询改写](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016840)。

### on_query_computation_clause

#### 说明

实时物化视图（Real-Time Materialized View）是物化视图的一种特殊形式，它会在基表数据变更时自动维护物化视图的数据，确保物化视图中的数据始终与基表保持同步。与普通物化视图不同，实时物化视图不需要手动刷新，系统会自动维护其数据一致性。

- `DISABLE ON QUERY COMPUTATION`：默认值，指定创建普通物化视图。
 - `ENABLE ON QUERY COMPUTATION`：指定创建实时物化视图。

  #### 注意

     - 使用 `MIN`/`MAX` 函数的物化视图不支持实时物化视图。
     - 带有外连接的聚合物化视图不支持实时物化视图。
     - 带有集合查询的物化视图不支持实时物化视图。
     - 嵌套物化视图不支持创建为实时物化视图。

更多实时物化视图的信息，参见 [创建物化视图](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016839) 中 **创建实时物化视图** 章节。

## 示例

1. 创建销售相关的基础表。

   ```sql
   -- 创建产品表
   CREATE TABLE products (
       product_id     NUMBER PRIMARY KEY,
       product_name   VARCHAR2(100) NOT NULL,
       category_id    NUMBER,
       unit_price     NUMBER(10,2),
       create_time    DATE DEFAULT SYSDATE
   );

   -- 创建销售订单表
   CREATE TABLE sales_orders (
       order_id       NUMBER PRIMARY KEY,
       product_id     NUMBER,
       quantity       NUMBER,
       amount         NUMBER(10,2),
       order_date     DATE DEFAULT SYSDATE
   );

   -- 创建客户表
   CREATE TABLE customers (
       customer_id    NUMBER PRIMARY KEY,
       customer_name  VARCHAR2(100) NOT NULL,
       email          VARCHAR2(100),
       phone          VARCHAR2(20),
       address        VARCHAR2(200),
       created_at     TIMESTAMP DEFAULT SYSTIMESTAMP
   );

   ```
 2. 创建不自动刷新的物化视图（用于静态报表）。

   ```sql
   -- 创建产品分类销售汇总报表（不自动刷新）
   CREATE MATERIALIZED VIEW mv_product_category_sales
   NEVER REFRESH
   AS
   SELECT
       p.category_id,
       COUNT(DISTINCT so.order_id) AS order_count,
       SUM(so.quantity) AS total_quantity,
       SUM(so.amount) AS total_amount
   FROM
       sales_orders so
   JOIN
       products p ON so.product_id = p.product_id
   GROUP BY
       p.category_id;

   ```
 3. 创建按需刷新的物化视图（用于定期更新的分析报表）。

   ```sql
   -- 创建月度销售趋势分析物化视图
   CREATE MATERIALIZED VIEW mv_monthly_sales_trend
   REFRESH COMPLETE ON DEMAND
   AS
   SELECT
       TO_CHAR(TRUNC(order_date, 'MM'), 'YYYY-MM') AS month,
       p.category_id,
       COUNT(DISTINCT order_id) AS order_count,
       SUM(quantity) AS total_quantity,
       SUM(amount) AS total_amount
   FROM
       sales_orders so
   JOIN
       products p ON so.product_id = p.product_id
   WHERE
       order_date >= ADD_MONTHS(TRUNC(SYSDATE, 'YEAR'), -12)  -- 最近12个月数据
   GROUP BY
       TO_CHAR(TRUNC(order_date, 'MM'), 'YYYY-MM'),
       p.category_id
   ORDER BY
       month, p.category_id;

   ```
 4. 创建带自动刷新计划的物化视图（用于实时监控）。

   ```sql
   -- 创建热销产品排行榜（每天凌晨2点自动刷新）
   CREATE MATERIALIZED VIEW mv_hot_products
   REFRESH COMPLETE
   START WITH TRUNC(SYSDATE) + 1 + 2/24  -- 明天凌晨2点
   NEXT TRUNC(SYSDATE) + 1 + 2/24        -- 之后每天凌晨2点刷新
   AS
   SELECT
       p.product_id,
       p.product_name,
       p.category_id,
       COUNT(DISTINCT so.order_id) AS order_count,
       SUM(so.quantity) AS total_quantity,
       SUM(so.amount) AS total_amount
   FROM
       sales_orders so
   JOIN
       products p ON so.product_id = p.product_id
   WHERE
       so.order_date >= TRUNC(SYSDATE) - 30
   GROUP BY
       p.product_id, p.product_name, p.category_id
   ORDER BY
       total_quantity DESC
   FETCH FIRST 100 ROWS ONLY;

   ```
 5. 在物化视图上创建索引（提高查询性能）。

   ```sql
   -- 创建购买行为分析物化视图
   CREATE MATERIALIZED VIEW mv_customer_behavior
   REFRESH COMPLETE ON DEMAND
   AS
   SELECT
       product_id,
       COUNT(DISTINCT order_id) AS purchase_times,
       SUM(quantity) AS total_quantity,
       MIN(order_date) AS first_purchase_date,
       MAX(order_date) AS last_purchase_date
   FROM
       sales_orders
   WHERE
       order_date >= ADD_MONTHS(TRUNC(SYSDATE), -12)  -- 最近12个月数据
   GROUP BY
       product_id;

   -- 为物化视图创建索引
   CREATE INDEX idx_mv_cust_behavior ON mv_customer_behavior(product_id);
   CREATE INDEX idx_mv_cust_purchase ON mv_customer_behavior(last_purchase_date);

   ```
 6. 创建带分区的物化视图（处理大量数据）。

   ```sql
   -- 创建按产品类别分区的销售汇总物化视图
   CREATE MATERIALIZED VIEW mv_category_sales_partitioned
   PARTITION BY HASH(category_id) PARTITIONS 8
   REFRESH COMPLETE ON DEMAND
   AS
   SELECT
       p.category_id,
       TRUNC(so.order_date, 'MM') AS month,
       COUNT(DISTINCT so.order_id) AS order_count,
       SUM(so.quantity) AS total_quantity,
       SUM(so.amount) AS total_amount
   FROM
       sales_orders so
   JOIN
       products p ON so.product_id = p.product_id
   WHERE
       so.order_date >= TO_DATE('2023-01-01', 'YYYY-MM-DD')
   GROUP BY
       p.category_id, TRUNC(so.order_date, 'MM');

   ```
 7. 创建列存格式的物化视图（适合分析型查询）。

   ```sql
   -- 创建销售分析宽表（列存格式）
   CREATE MATERIALIZED VIEW mv_sales_analysis_wide
   WITH COLUMN GROUP(EACH COLUMN)  -- 列存格式
   REFRESH COMPLETE ON DEMAND
   AS
   SELECT
       so.order_id,
       so.order_date,
       so.customer_id,
       p.product_id,
       p.product_name,
       p.category_id,
       p.unit_price,
       so.quantity,
       so.amount,
       so.quantity * p.unit_price AS calculated_amount
   FROM
       sales_orders so
   JOIN
       products p ON so.product_id = p.product_id
   WHERE
       so.order_date >= ADD_MONTHS(TRUNC(SYSDATE), -12);

   ```
 8. 查看物化视图定义。

   ```sql
   -- 查看月度销售趋势物化视图的 DDL 定义
   SELECT DBMS_METADATA.GET_DDL('MATERIALIZED_VIEW', 'MV_MONTHLY_SALES_TREND') FROM DUAL;

   -- 查看物化视图的刷新状态
   SELECT
       mview_name,
       refresh_mode,
       refresh_method,
       last_refresh_date,
       staleness
   FROM
       user_mviews
   ORDER BY
       last_refresh_date DESC NULLS LAST;

   ```

## 相关文档

- [物化视图概述](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016841)
 - [创建物化视图](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016839)
 - [刷新物化视图](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016843)
 - [查询物化视图](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016838)
 - [删除物化视图](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016842)

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
