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;