ALTER INDEX用于变更搜索索引列、修改二级索引和搜索索引的索引状态。如果需要导入或更新大量数据,建议在导入或更新前通过ALTER INDEX禁用索引以保证导入效率,提高更新速度。
引擎与版本
ALTER INDEX
语法仅适用于宽表引擎。无版本限制。
使用ALTER INDEX
修改搜索索引、列存索引要求Lindorm SQL为2.6.1以上版本。如何查看Lindorm SQL的版本,请参见SQL版本说明。
语法
alter_index_statement ::= ALTER INDEX [IF EXISTS] index_identifier
ON table_identifier
{
ADD COLUMNS '(' alter_key_expression ')'
|
alter_state_expression
}
[ASYNC]
alter_key_expression ::= index_key_definition [ (',' index_key_definition)* ]
index_key_definition ::= {
column_identifier [ DESC ]
| column_identifier'(' column_options ')'
}
alter_state_expression ::= { ACTIVE | INACTIVE }
如果修改的是二级索引时,
ALTER INDEX
仅支持修改索引状态。只有修改的是搜索索引时,才支持语法中添加索引列时在索引列后面指定列属性。
差异说明
Lindorm宽表引擎共支持三种索引:二级索引、搜索索引和列存索引。其中,列存索引不支持修改。
二级索引和搜索索引对各语法要素的支持情况如下:
语法要素 | 二级索引 | 搜索索引 |
✖️ | 〇 | |
〇 | 〇 |
使用说明
增加列(ADD COLUMNS)
仅搜索索引支持增加索引列。
您可以在增加一个或多个列的同时,为新增的列增加索引键属性,例如ADD COLUMNS(c1,c3,p1(type=text,analyzer=ik))
表示新增三个索引列c1、c3和p1,并指定p1列使用ik分词器。可添加的索引键属性,请参见搜索索引键属性(option_definition)。
修改索引状态(alter_state_expression)
支持修改的索引状态共以下三种:
参数 | 说明 |
ACTIVE | 索引可用。 |
INACTIVE | 索引不可用。 |
DISABLED | 禁用索引。 说明
|
REBUILD | 重新构建索引。 重要 仅搜索索引支持RERUILD状态。 |
示例
假设主表和索引的创建语句如下:
-- 创建主表
CREATE TABLE test (
p1 VARCHAR NOT NULL,
p2 INTEGER NOT NULL,
c1 BIGINT,
c2 DOUBLE,
c3 VARCHAR,
c4 TIMESTAMP,
PRIMARY KEY(p1, p2)
) WITH (CONSISTENCY = 'strong', MUTABILITY='MUTABLE_LATEST');
-- 创建二级索引idx1
CREATE INDEX idx1 ON test(c1 desc) include(c3,c4) WITH (COMPRESSION='ZSTD');
-- 创建搜索索引idx2
CREATE INDEX IF NOT EXISTS idx2 USING SEARCH ON test(p1, p2, c2);
禁用索引
禁用索引idx1,但主表中的数据变更仍然触发索引更新的操作,以便重新启用索引时索引是立即可用的。
ALTER INDEX idx1 ON test DISABLED;
结果验证
您可以执行SHOW INDEX FROM test;
语句,查看修改结果。
重新启用二级索引
ALTER INDEX IF EXISTS idx1 ON test ACTIVE;
结果验证
您可以执行SHOW INDEX FROM test;
语句,查看索引状态。
重新启用搜索索引
如果搜索索引已被禁用,即索引状态为
DISABLED
,执行以下语句重新构建并启用索引。ALTER INDEX IF EXISTS idx2 ON test REBUILD;
如果搜索索引不可用,即索引状态为
INACTIVE
,执行以下语句启用搜索索引。ALTER INDEX IF EXISTS idx2 ON test ACTIVE;
结果验证
您可以执行SHOW INDEX FROM test;
语句,查看索引状态。
新增搜索索引列
为搜索索引idx2新增c1列和c3列,并为c3列添加索引键属性。
ALTER INDEX IF EXISTS idx2 ON test ADD COLUMNS(c1,c3(type=text,analyzer=ik));
结果验证
您可以执行SHOW INDEX FROM test;
语句,查看索引列。
搜索引擎Elasticsearch兼容版本暂不支持删除搜索索引列。
ALTER INDEX IF EXISTS idx2 ON test DROP COLUMNS(c3);
结果验证
您可以执行SHOW INDEX FROM test;
语句,查看索引列。
- 本页导读 (1)