ALTER INDEX用于变更搜索索引列、修改二级索引和搜索索引的索引状态。如果需要导入或更新大量数据,建议在导入或更新前通过ALTER INDEX禁用索引以保证导入效率,提高更新速度。
语法
alter_index_statement ::= ALTER INDEX [IF EXISTS] index_identifier
ON table_identifier
{
ADD COLUMNS '(' alter_key_expression ')'
|
DROP 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)中的搜索索引键属性(option_definition)。
修改索引状态(alter_state_expression)
支持修改的索引状态共以下三种:
参数 | 说明 |
ACTIVE | 索引为可用状态。 |
INACTIVE | 索引不可用。 |
DISABLED | 禁用索引。修改后,索引状态为INACTIVE。 |
示例
假设主表和索引的创建语句如下:
-- 创建主表
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;
语句,查看索引状态。
新增搜索索引列
为搜索索引idx2新增c1列和c3列,并为c3列添加索引键属性。
ALTER INDEX IF EXISTS idx2 ON test ADD COLUMNS(c1,c3(type=text,analyzer=ik));
说明
历史数据不会自动同步至新增的索引列,如果希望这些列的历史数据被索引到,请重新构建索引。如何操作,请参见重新构建搜索索引。
结果验证
您可以执行SHOW INDEX FROM test;
语句,查看索引列。
重新构建搜索索引
重新将全量数据同步到搜索索引中。
ALTER INDEX IF EXISTS idx2 ON test REBUILD;