TDSQL Boundless CREATE INDEX

索引是一种用于快速检索数据的数据结构。TDSQL Boundless 支持创建普通索引、唯一索引、全局二级索引(GSI)和多值索引(MVI),这里说明创建索引的语法、参数及示例。

相关产品
TDSQL Boundless 产品页,含版本规格、价格与购买入口。

一、概述

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)));

赞 (0)
上一篇 4天前
下一篇 4天前