首批通过分布式安全可靠测评,为关键业务系统打造
CREATE INDEX
更新时间:2024-11-29 23:00:00
描述
该语句用来创建索引。索引是创建在表上的,对数据库表中一列或多列的值进行排序的一种结构。其作用主要在于提高查询的速度,降低数据库系统的性能开销。
OceanBase 数据库当前版本支持的索引类型包含唯一索引和非唯一索引,创建索引时可以通过 STORING(column_name,...) 指定索引表上的冗余列。索引表的冗余列除了包含用户指定添加的列外,还会自动添加上主键表的主键列(如果无主键表则包含 Hidden PK),存储额外的列在索引中可以为数据库优化器提供更多的选择。
说明
在 OceanBase 数据库 MySQL 模式下,如果删除表中的所有索引列,则所创建的索引失效。
权限要求
执行 CREATE INDEX 语句创建索引需要当前用户至少拥有对应对象的 INDEX 权限。有关 OceanBase 数据库权限的详细介绍,请参见 MySQL 模式下的权限分类。
语法
CREATE [hint_options] [SPATIAL | UNIQUE] INDEX [IF NOT EXISTS] index_name
[USING BTREE] ON table_name (sort_column_key [, sort_column_key... ])
[index_option...] [partition_option] [index_column_group_option]
sort_column_key:
column_name [(integer)] [ASC] [ID id]
| (index_expr) [ASC] [ID id]
index_option:
GLOBAL
| LOCAL
| BLOCK_SIZE integer
| COMMENT STRING_VALUE
| STORING (column_name [, column_name...])
| WITH_ROWID
| WITH PARSER STRING_VALUE
| index_using_algorithm
| visibility_option
| DATA_TABLE_ID data_table_id
| INDEX_TABLE_ID index_table_id
| VIRTUAL_COLUMN_ID virtual_column_id
| MAX_USED_PART_ID used_part_id
index_column_group_option:
WITH COLUMN GROUP([all columns, ]each column)
参数说明
| 参数项 | 描述 |
|---|---|
| hint_options | 指定 Hint 选项,为可选项。目前仅支持使用 parallel,如 /*+ parallel(10) */。 |
| [SPATIAL | UNIQUE] | 可选项,指定索引的类型。
|
| IF NOT EXISTS | 用于指示如果索引已经存在,则不进行创建。创建索引时,如果索引存在且没有指定 IF NOT EXISTS,则会报错。 |
| index_name | 指定待创建的索引名称。 |
| USING BTREE | 可选项,表示创建索引时使用 B-tree 索引结构。
说明目前仅支持指定为 |
| table_name | 指定要在其上创建索引的表,可以直接指定表的名字,也可使用 schema_name.table_name 格式指定表名和表所属的数据库名。 |
| sort_column_key | 指定一个排序列的键,创建索引时可以指定多个排序列,多个排序列使用英文逗号(,)分开,详细介绍可参见下文 sort_column_key。 |
| index_option | 指定索引选项,创建索引时可以指定多个索引选项,多个索引选项使用英文空格分开,详细介绍可参见下文 index_option。 |
| partition_option | 指定创建索引分区的选项,支持指定哈希分区、键分区、范围分区、列表分区以及外部表分区。 |
| index_column_group_option | 指定索引选项。详细介绍可参见下文 index_column_group_option。 |
sort_column_key
column_name [(integer)] [ASC] [ID id]:表示指定一个列名作为排序键。column_name:表示要排序的列名。integer:可选项,表示排序键的长度限制。ASC:可选项,表示按升序排序,目前暂不支持降序(DESC)排列。ID id:可选项,表示排序键的 ID 号。
例如,在名为
t3的表上创建一个名为index3的索引,并指定该索引在c1列上按升序进行排序。CREATE INDEX index3 ON t3 (c1 ASC);(index_expr) [ASC] [ID id]:表示指定一个索引表达式作为排序键。索引表达式可以使用表达式或函数来定义。它可以包含以下选项:(index_expr):表示索引表达式,且允许是布尔表达式,例如c1=c1。OceanBase 数据库当前版本禁止创建生成列上的函数索引。函数索引所支持的表达式参见 函数索引支持的系统函数列表。ASC:可选项,表示按升序排序,目前暂不支持降序(DESC)排列。ID id:可选项,表示排序键的 ID 号。
例如,在名为
t4的表上创建一个名为index4的索引,指定c1+c2作为索引表达式,并按升序进行排序。CREATE INDEX index4 ON t4 ((c1 + c2) ASC);
创建索引时可指定多个排序列,多个排序列使用英文逗号(,)分开。例如,在名为 t5 的表上创建一个名为 index5 的索引,并指定使用 c1 列和 c2+c3 表达式作为索引的排序键。
CREATE INDEX index5 ON t5 (c1, (c2+c3));
index_option
GLOBAL:表示创建全局索引。LOCAL:表示创建局部索引。BLOCK_SIZE integer:指定索引块的大小,即每个索引块中的字节数。COMMENT STRING_VALUE:为索引添加注释。STORING (column_name [, column_name...]):指定要存储在索引中的列,多个列使用英文逗号(,)分开。WITH_ROWID:创建包含行标识符的索引。WITH PARSER STRING_VALUE:指定索引所需的解析器。index_using_algorithm:指定索引所使用的算法。可指定 USING BTREE 或 USING HASH。但不能用 USING HASH 创建多值索引。visibility_option:指定索引的可见性。DATA_TABLE_ID data_table_id:指定索引所属的数据表 ID。INDEX_TABLE_ID index_table_id:指定索引表的 ID。VIRTUAL_COLUMN_ID virtual_column_id:指定虚拟列的 ID。MAX_USED_PART_ID used_part_id:指定索引的最大使用分区 ID。
index_column_group_option
WITH COLUMN GROUP(all columns, each column):指定创建行存列存冗余的索引。WITH COLUMN GROUP(each column):指定创建列存索引。
示例
使用以下 SQL 语句为表创建列存索引。
使用下面 SQL 语句创建表
test_tbl1。CREATE TABLE test_tbl1 (col1 INT, col2 VARCHAR(50));在
test_tbl1表上创建列存索引idx1_test_tbl1,引用col1列。CREATE INDEX idx1_test_tbl1 ON test_tbl1 (col1) WITH COLUMN GROUP(each column);