文档

ALTER INDEX

更新时间:

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)

✖️

修改索引状态(alter_state_expression)

使用说明

增加列(ADD COLUMNS)

搜索索引支持增加索引列。

您可以在增加一个或多个列的同时,为新增的列增加索引键属性,例如ADD COLUMNS(c1,c3,p1(type=text,analyzer=ik))表示新增三个索引列c1、c3和p1,并指定p1列使用ik分词器。可添加的索引键属性,请参见搜索索引键属性(option_definition)

修改索引状态(alter_state_expression)

支持修改的索引状态共以下三种:

参数

说明

ACTIVE

索引可用。

INACTIVE

索引不可用。

DISABLED

禁用索引。

说明
  • 2.2.16以上,2.6.3及之前版本的宽表引擎在禁用二级索引后如果想要再次使用,需通过BUILD INDEX语句单独构建。详细说明,请参见BUILD INDEX

  • 搜索索引禁用后,主表中的数据变更将不会触发索引更新。

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)