---
title: "CREATE INDEX - OceanBase 数据库 V4.5.0 | OceanBase 文档中心"
description: CREATE INDEX 描述 该语句用来创建索引。索引是创建在表上的，对数据库表中一列或多列的值进行排序的一种结构。其作用主要在于提高查询的速度，降低数据库系统的性能开销。 OceanBase 数据库当前版本支持的索引类型包含唯一索引、非唯一索引、函数索引、列存索引和空间索引。创建索引时可以通过 STORING(c…
---
切换语言

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

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

# CREATE INDEX

更新时间：2026-04-08 17:17:23

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.5.0/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/1600.create-index-of-oracle-mode.md)  

## 描述

该语句用来创建索引。索引是创建在表上的，对数据库表中一列或多列的值进行排序的一种结构。其作用主要在于提高查询的速度，降低数据库系统的性能开销。

OceanBase 数据库当前版本支持的索引类型包含唯一索引、非唯一索引、函数索引、列存索引和空间索引。创建索引时可以通过 `STORING(column_name,...)` 指定索引表上的冗余列。索引表的冗余列除了包含用户指定添加的列外，还会自动添加上主键表的主键列（如果无主键表则包含 Hidden PK），存储额外的列在索引中可以为数据库优化器提供更多的选择。

#### 说明

在 OceanBase 数据库 Oracle 模式下，如果删除表中被索引引用的列，则所创建的索引失效。

## 权限要求

执行 `CREATE INDEX` 语句创建索引需要当前用户至少拥有对应对象的 INDEX 权限。有关 OceanBase 数据库权限的详细介绍，请参见 [Oracle 模式下的权限分类](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479235)。

## 语法

```sql
CREATE [hint_options]  [UNIQUE] INDEX index_name
    [USING BTREE] ON table_name (sort_column_key [, sort_column_key...])
    [INDEXTYPE IS MDSYS.SPATIAL_INDEX] [index_option...] [partition_option] [index_column_group_option]

sort_column_key:
    index_expr [ASC] opt_null_pos [ID id]

opt_null_pos:
      empty
    | NULLS LAST
    | NULLS FIRST

index_option:
      GLOBAL
    | LOCAL
    | BLOCK_SIZE [=] integer
    | COMMENT STRING_VALUE
    | STORING (column_name_list)
    | WITH ROWID
    | WITH PARSER STRING_VALUE
    | index_using_algorithm
    | visibility_option
    | DATA_TABLE_ID [=] data_table_id
    | INDEX_TABLE_ID [=] index_table_id
    | MAX_USED_PART_ID [=] used_part_id
    | physical_attributes_option
    | parallel_option

parallel_option:
      PARALLEL [=] integer
    | NOPARALLEL

index_column_group_option：
    WITH COLUMN GROUP([all columns, ]each column)

```

## 参数说明

| 参数项 | 描述 |
| --- | --- |
| hint_options | 指定 Hint 选项，为可选项。目前仅支持使用 parallel，如 `/*+ parallel(10) */`。 |
| [UNIQUE] | 可选项，用于指定创建唯一索引。 |
| index_name | 指定待创建的索引名称。 |
| USING BTREE | 可选项，表示创建索引时使用 B-tree 索引结构。   #### 说明    目前仅支持指定为 `USING BTREE`。 |
| table_name | 指定要在其上创建索引的表，可以直接指定表的名字，也可使用 `schema_name.table_name` 格式指定表名和表所属的数据库名。 |
| sort_column_key | 指定一个排序列的键，创建索引时可以指定多个排序列，多个排序列使用英文逗号(`,`)分开，详细介绍可参见下文 [sort_column_key](#sort_column_key)。 |
| INDEXTYPE IS MDSYS.SPATIAL_INDEX | 指定创建空间索引。   #### 注意    创建空间索引的列必须在建表时指定 SRID 信息，更多有关创建空间索引的信息，参见 [创建空间索引](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004481672)。 |
| index_option | 指定索引选项，创建索引时可以指定多个索引选项，多个索引选项使用英文空格分开，详细介绍可参见下文 [index_option](#index_option)。 |
| partition_option | 指定创建索引分区的选项，支持指定哈希分区、范围分区、列表分区以及外部表分区。 |
| index_column_group_option | 指定索引选项。详细介绍可参见下文 [index_column_group_option](#index_column_group_option)。 |

### sort_column_key

- `index_expr`：指定排序所依据的列或表达式，但是不允许是布尔表达式，例如 `c1=c1`。OceanBase 数据库当前版本禁止创建生成列上的函数索引。函数索引所支持的表达式参见 [函数索引支持的系统函数列表](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004476648)。
 - `ASC`：可选项，表示按升序排序，目前暂不支持降序（DESC）排列。
 - `opt_null_pos`：指定空值在排序中的位置，有如下三种取值。

     - `empty`：表示未指定空值位置，在默认情况下将遵循数据库管理系统的默认行为。
     - `NULLS LAST`：指定空值在排序结果中出现在非空值之后。
     - `NULLS FIRST`：指定空值在排序结果中出现在非空值之前。
 - `ID id`：可选项，表示排序键的 ID 号。

例如，在名为 `TEST_TBL1` 的表上创建一个名为 `IDX_TBL1_C1` 的索引，指定该索引在 `c1` 列上按升序进行排序，并指定空值在排序结果中出现在非空值之后。

```sql
obclient> CREATE TABLE TEST_TBL1 (
    id NUMBER PRIMARY KEY,
    c1 VARCHAR2(100),
    c2 NUMBER,
    c3 DATE
);

```

```sql
obclient> CREATE INDEX IDX_TEST_TBL1_C1 ON TEST_TBL1 (c1 ASC NULLS LAST);

```

### index_option

- `GLOBAL`：表示创建全局索引。
 - `LOCAL`：表示创建局部索引。
 - `BLOCK_SIZE [=] integer`：指定索引块的大小，即每个索引块中的字节数。
 - `COMMENT STRING_VALUE`：为索引添加注释。
 - `STORING (column_name_list)`：指定要存储在索引中的列。
 - `WITH ROWID`：创建包含行标识符的索引。
 - `WITH PARSER STRING_VALUE`：指定索引所需的解析器。
 - `index_using_algorithm`：指定索引所使用的算法。
 - `visibility_option`：指定索引的可见性。
 - `DATA_TABLE_ID [=] data_table_id`：指定索引所属的数据表 ID。
 - `INDEX_TABLE_ID [=] index_table_id`：指定索引表的 ID。
 - `MAX_USED_PART_ID [=] used_part_id`：指定索引的最大已使用分区 ID。
 - `physical_attributes_option`：定义索引的物理属性选项。
 - `parallel_option`：指定索引的并行情况。

     - `PARALLEL [=] integer`：指定并行执行的级别，`integer` 是一个整数，表示执行的并行度。
     - `NOPARALLEL`：指定禁用并行执行。

### index_column_group_option

- `WITH COLUMN GROUP(all columns, each column)`：指定创建行存列存冗余的索引。
 - `WITH COLUMN GROUP(all columns)`：指定创建行存索引。
 - `WITH COLUMN GROUP(each column)`：指定创建列存索引。

## 示例

使用以下 SQL 语句为表创建列存索引。

1. 使用下面 SQL 语句创建表 `TEST_TBL2`。

   ```sql
   CREATE TABLE TEST_TBL2 (col1 NUMBER, col2 VARCHAR2(50));

   ```
 2. 在 `TEST_TBL2` 表上创建列存索引 `IDX_TEST_TBL2_COL1`，引用 `col1` 列。

   ```sql
   CREATE INDEX IDX_TEST_TBL2_COL1 ON TEST_TBL2 (col1) WITH COLUMN GROUP(each column);

   ```

## 相关文档

- [索引简介](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479481)
 - [创建索引](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004476646)
 - [查看索引](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004476643)
 - [删除索引](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004476644)

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