---
title: "CREATE OUTLINE - OceanBase 数据库 V4.2.2 | OceanBase 文档中心"
description: CREATE OUTLINE 描述 该语句用来创建 Outline。可以通过两种方式创建，一种是通过 SQL_TEXT （用户执行的带参数的原始语句），另一种是通过 SQL_ID 创建。 说明 创建 Outline 需要进入对应的数据库下执行。 当 SQL_ID 相同时，使用 SQL_TEXT 方式创建的 Outli…
---
切换语言

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

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

# CREATE OUTLINE

更新时间：2026-04-10 11:58:36

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.2.2/zh-CN/700.reference/500.sql-reference/100.sql-syntax/200.common-tenant-of-mysql-mode/600.sql-statement-of-mysql-mode/2300.create-outline-of-mysql-mode.md)  

## 描述

该语句用来创建 Outline。可以通过两种方式创建，一种是通过 `SQL_TEXT`（用户执行的带参数的原始语句），另一种是通过 `SQL_ID` 创建。

#### 说明

创建 Outline 需要进入对应的数据库下执行。

当 `SQL_ID` 相同时，使用 `SQL_TEXT` 方式创建的 Outline 会覆盖 `SQL_ID` 方式创建的 Outline，`SQL_TEXT` 方式创建的优先级更高。

此外，OceanBase 数据库通过 `SQL_ID` 区分不同的 SQL，而 `SQL_ID` 是通过 `SQL_TEXT` 取 MD5 加密得到的，相同的 SQL 文本即使多一个换行或制表符，MD5 得到的 `SQL_ID` 都会不同。在实际生产系统中，推荐通过 `SQL_ID` 进行 Outline 绑定。

## 语法

- 使用 `SQL_TEXT` 创建 Outline。

  ```sql
  CREATE [OR REPLACE] OUTLINE outline_name ON stmt [ TO target_stmt ]

  ```
 - 使用 `SQL_ID` 创建 Outline。

  ```sql
  CREATE OUTLINE outline_name ON sql_id USING HINT hint;

  ```

## 参数解释

| **参数** | **描述** |
| --- | --- |
| outline_name | 指定要创建的 Outline 名称。 |
| OR REPLACE | 指定 `OR REPLACE` 后，如果要创建的 Outline 已存在，则会替换原有的 Outline。 |
| stmt | 一般为一个带有 Hint 和原始参数的 DML 语句。 |
| TO target_stmt | 如果不指定 `TO target_stmt`，则表示如果数据库接受的 SQL 参数化后与 `stmt` 去掉 Hint 参数化文本相同，则将该 SQL 绑定 `stmt` 中 Hint 生成执行计划；如果期望对含有 Hint 的语句进行固定计划，则需要 `TO target_stmt` 来指明原始的 SQL。    **注意** 在使用 `target_stmt` 时，严格要求 `stmt` 与 `target_stmt` 在去掉 Hint 后完全匹配。 |
| sql_id | 如果 `sql_id` 对应的 SQL 语句已经有 Hint，则创建 Outline 指定的 Hint 会覆盖原始语句中所有 Hint。 |
| hint | 格式为 `/*+ xxx */`。   #### 说明    - 当使用 `SQL_TEXT` 创建 Outline 以实现查询限流时，不需要特意指定额外的参数。例如，可以这样创建一个 Outline：`create outline otl2 on select /*+ max_concurrent(1) `*，这里的 `c1` 使用参数化的占位符（如 `?`）而不必指定具体的值。*    - *当绑定执行计划时，必须指定相应的参数。例如，创建绑定执行计划的 Outline 可以使用类似的语句：`create outline otl2 on select /`*`+ no_rewrite */ * from t where c1=1`，这里的 `c1` 需要指定具体的值。 |

## 示例

- 使用 `SQL_TEXT` 创建 Outline。

  ```sql
  obclient> CREATE OUTLINE otl_idx_c2
  ON SELECT/*+ index(t1 idx_c2)*/ * FROM t1 WHERE c2 = 1;

  ```sql
  obclient> CREATE OUTLINE otl_idx_c2
  ON 'ED570339F2C856BA96008A29EDF04C74'
  USING HINT /*+ index(t1 idx_c2)*/ ;

  ```
 - 使用 `SQL_TEXT` 创建 Outline，在 HINT 里同时指定限流和执行计划：

  ```sql
  obclient> CREATE OUTLINE otl_idx_c2 ON SELEC/*+ use_nl(tbl2) max_concurrent(1)*/ * FROM t WHERE c1=?;

  ```

## 相关文档

[计划绑定](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000510558)

 上一篇 下一篇 ![有帮助](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) 咨询热线
