ALTER INDEX

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)

✖️

修改索引状态(alter_state_expression)

✖️

使用说明

增加列(ADD COLUMNS)

搜索索引支持增加列。

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

  • 列存索引:您可以为列存索引添加普通列或者JSON列的静态映射规则。详细说明,请参见为列存表添加列(公测中)

修改索引状态(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);

-- 创建列存索引idx3
CREATE INDEX idx3 USING COLUMNAR ON test(p1, p2, c1) 
PARTITION BY ENUMERABLE (p2, bucket(16,p1)) 
WITH (
  `lindorm_columnar.user.index.database` = 'default',
  `lindorm_columnar.user.index.table` = 'test');

禁用索引

禁用索引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 idx3 ON test ADD COLUMNS(c3);

详细语法介绍,请参见为列存表添加列(公测中)