CREATE INDEX

最近更新时间:2026-06-29 09:48:02

我的收藏

概述

索引是对数据的排序,TDSQL Boundless 使用索引快速定位数据。本章节给出创建索引的语法和示例。
TDSQL Boundless 创建二级索引默认为在线操作,不会阻塞对表的读写。有关 Online DDL 的详细说明,请参考 Online DDL 说明

对已有表创建索引

# 方式一:使用 CREATE INDEX 语句
CREATE [UNIQUE] INDEX
index_name ON tbl_name (column_names)
[GLOBAL]
[index_option]
[algorithm_option];

# 方式二:使用 ALTER TABLE 语句
ALTER TABLE tbl_name ADD
{ [UNIQUE] {INDEX | KEY}
| PRIMARY KEY
}
index_name (column_names)
[GLOBAL]
[index_option]
[algorithm_option];
index_option: {
| COMMENT 'string'
| {VISIBLE | INVISIBLE}
}

algorithm_option:
ALGORITHM [=] {DEFAULT | INPLACE | COPY}
参数说明
索引选项 (index_option)
COMMENT 'string':为索引添加注释说明
VISIBLE | INVISIBLE:设置索引是否对优化器可见
算法选项 (algorithm_option)
ALGORITHM [=] {DEFAULT | INPLACE | COPY}:指定创建索引的算法
DEFAULT:由系统自动选择最优算法
INPLACE:在线创建,不阻塞读写(推荐)
COPY:拷贝表数据创建索引,默认不会阻塞读写操作
GLOBAL 选项: 详见 全局索引

示例

# 创建测试表
CREATE TABLE sbtest1 (id int, v1 int, v2 int, v3 int, v4 int);

# 截止迭代21.2.3,暂不支持online add pk
ALTER TABLE sbtest1 ADD PRIMARY KEY(id), ALGORITHM = COPY;
ERROR 8528 (HY000): Online alter table tdsql.sbtest1 failed with 'Not support table without primary key', please set variable 'tdsql_use_online_copy_ddl' to 'false' if no write during alter is acceptable.

# 显示设置索引 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);