帮你快速理解、总结文档立即下载

CREATE INDEX

最近更新时间:2026-08-18 19:12:05
我的收藏

概述

索引是一种用于快速检索数据的数据结构。TDSQL Boundless 支持创建普通索引、唯一索引、全局二级索引(GSI)和多值索引(MVI),本文介绍创建索引的语法、参数及示例。
TDSQL Boundless 创建二级索引默认为在线操作,不会阻塞对表的读写。有关 Online DDL 的详细说明,请参见 Online DDL 说明

语法

# 方式一:使用 CREATE INDEX 语句
CREATE [UNIQUE] INDEX
index_name ON tbl_name (key_part [, key_part ...])
[GLOBAL [gsi_partition_option]]
[index_option]
[algorithm_option];
# 方式二:使用 ALTER TABLE 语句
ALTER TABLE tbl_name ADD
{ [UNIQUE] {INDEX | KEY}
| PRIMARY KEY
}
index_name (key_part [, key_part ...])
[GLOBAL [gsi_partition_option]]
[index_option]
[algorithm_option];
index_option: {
| COMMENT 'string'
| {VISIBLE | INVISIBLE}
}
algorithm_option:
ALGORITHM [=] {DEFAULT | INPLACE | COPY}
key_part:
column_name [(length)] [ASC | DESC]
| ((CAST(expr AS type ARRAY)))
参数说明
索引选项 (index_option)
COMMENT 'string':为索引添加注释说明
VISIBLE | INVISIBLE:设置索引是否对优化器可见
算法选项 (algorithm_option)
ALGORITHM [=] {DEFAULT | INPLACE | COPY}:指定创建索引的算法
DEFAULT:由系统自动选择最优算法
INPLACE:在线创建,不阻塞读写(推荐)
COPY:拷贝表数据创建索引,默认不会阻塞读写操作
索引列 (key_part)
column_name [(length)] [ASC | DESC]:对普通列建索引,可选前缀长度与排序方向
((CAST(expr AS type ARRAY))):多值索引 (MVI),对 JSON 表达式 expr(例如 attributes->'$.tags')返回的数组建索引,需使用双括号;支持 UNIQUE 多值索引,以及多值索引列与普通列组合的复合索引
GLOBAL [gsi_partition_option] 选项: 详见 全局二级索引
注意:
多值索引本身不能声明为全局索引 (GLOBAL),即 CREATE INDEX ... GLOBAL 不可用于多值索引,否则报错 ER_GLOBAL_INDEX_UNSUPPORTED;但表上其他列的全局索引可与本地多值索引共存。

示例

创建普通索引与主键

# 创建测试表
CREATE TABLE sbtest1 (id int, v1 int, v2 int, v3 int, v4 int);
INSERT INTO sbtest1 VALUES(1, 10, 20, 30, 40), (2, 11, 21, 31, 41);
# 在线添加主键(支持 ALGORITHM = COPY 在线操作)
ALTER TABLE sbtest1 ADD PRIMARY KEY(id), ALGORITHM = COPY;
# 查看表结构确认主键已生效
SHOW CREATE TABLE sbtest1;
# 显示设置索引 COMMENT,可见性和算法
CREATE UNIQUE INDEX idx_v1 ON sbtest1 (v1) COMMENT 'v1_index' INVISIBLE ALGORITHM = INPLACE;
ALTER TABLE sbtest1 ADD INDEX idx_v2 (v2) COMMENT 'v2_index' VISIBLE, ALGORITHM = INPLACE;
# 默认使用 INPLACE 算法
CREATE UNIQUE INDEX idx_v4 ON sbtest1 (v4);
ALTER TABLE sbtest1 ADD INDEX idx_v3 (v3);

创建全局二级索引(GSI)

GSI 语法示例(含 GLOBAL PARTITION BY 分区 GSI)请参见 全局二级索引

创建多值索引 (MVI)

# 准备含 JSON 列的表
CREATE TABLE products (
id BIGINT NOT NULL AUTO_INCREMENT,
status INT NOT NULL DEFAULT 0,
attributes JSON,
PRIMARY KEY (id)
);
# 多值索引 (MVI):对 JSON 数组建函数索引,需双括号
CREATE INDEX idx_tags ON products ((CAST(attributes->'$.tags' AS CHAR(200) ARRAY)));
# UNIQUE 多值索引:保证每个数组元素在表内唯一
CREATE UNIQUE INDEX uk_tags ON products ((CAST(attributes->'$.tags' AS CHAR(200) ARRAY)));
# 复合多值索引:普通列与多值索引列组合
CREATE INDEX idx_status_tags ON products (status, (CAST(attributes->'$.tags' AS CHAR(200) ARRAY)));