ALTER INDEX 文は、検索インデックスの列を変更したり、セカンダリインデックスまたは検索インデックスのステータスを変更したりします。大量のデータをインポートまたは更新する際に、ALTER INDEX を使用してインデックスを無効化することで、パフォーマンスを向上させることができます。
構文
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 | DISABLED }セカンダリインデックスを変更する場合、
ALTER INDEXで変更できるのはインデックスのステータスのみです。検索インデックスを変更する場合にのみ、新しい列のプロパティを指定できます。
互換性
LindormTable は、セカンダリインデックス、検索インデックス、カラムナインデックスの 2 種類のインデックスをサポートしています。次の表は、各インデックスタイプと ALTER INDEX 文の句との互換性を示しています。
構文要素 | セカンダリインデックス | 検索インデックス |
✖️ | 〇 | |
〇 | 〇 |
使用方法
列の追加
セカンダリインデックスに列を追加することはできません。
1 つ以上の列を追加し、新しい列にインデックスキープロパティを指定できます。 たとえば、 ADD COLUMNS(c1,c3,p1(type=text,analyzer=ik)) を使用すると、3 つのインデックスキー列 c1、c3、p1 が追加され、p1 列で ik アナライザを使用するように指定されます。 利用可能なインデックスキープロパティの詳細については、「検索インデックスキープロパティ (option_definition)」をご参照ください。
alter_state_expression
インデックスステータスは、次のいずれかの状態に設定できます:
パラメーター | 説明 |
ACTIVE | インデックスは利用可能で、クエリで使用できます。 |
INACTIVE | インデックスは利用不可で、クエリ オプティマイザーによって無視されますが、ベーステーブルからのデータ更新は継続して受け取ります。 |
DISABLED | インデックスは無効化され、クエリ オプティマイザーによって無視され、ベーステーブルからのデータ更新も受け取らなくなります。 重要 セカンダリインデックスのステータスを `DISABLED` から `ACTIVE` に直接変更すると、データ損失が発生する可能性があります。インデックスを再度有効にする前に、インデックスを再構築する必要があります。 |
例
次の文は、例で使用されるベーステーブルとインデックスを作成します:
-- ベーステーブルを作成します。
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文は、インデックスのビルドが完了した後にのみ結果を返します。ALTER INDEX IF EXISTS idx2 ON test REBUILD;非同期検索インデックスビルド:
ALTER INDEX文は、インデックスが正常にビルドされたかどうかに関係なく、すぐに結果を返します。ALTER INDEX IF EXISTS idx2 ON test REBUILD ASYNC;