すべてのプロダクト
Search
ドキュメントセンター

Lindorm:ALTER INDEX

最終更新日:Apr 10, 2026

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 文の句との互換性を示しています。

構文要素

セカンダリインデックス

検索インデックス

列の追加

✖️

alter_state_expression

使用方法

列の追加

セカンダリインデックスに列を追加することはできません。

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;