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)。說明歷史數據不會自動同步至新增的索引列,如果希望這些列的歷史數據被索引到,請重新構建索引。如何操作,請參見重新構建搜索索引。
列存索引:您可以為列存索引添加普通列或者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);
詳細語法介紹,請參見為列存表添加列(公測中)。
重新構建搜索索引
重新將全量數據同步到搜索索引中。
ALTER INDEX IF EXISTS idx2 ON test REBUILD;