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

Lindorm:CREATE INDEX

最終更新日:Sep 17, 2026

CREATE INDEX は、LindormTable ワイドテーブルの 1 つ以上の列にインデックスを作成します。これにより、フルテーブルスキャンを行わずに非主キー検索、全文検索、分析クエリを行うことができます。

適用範囲

CREATE INDEX は、LindormTable にのみ適用されます。セカンダリインデックスには最小バージョン要件はありません。

重要

CREATE INDEX を使用して検索インデックスまたは列ストアインデックスを作成するには、Lindorm SQL V2.6.1 以降を使用してください。お使いの Lindorm SQL のバージョンを確認するには、SQL バージョンガイドをご参照ください。

事前準備

セカンダリインデックス、列ストアインデックス、および検索インデックスのインデックス構築ではデータルックアップが行われ、読み取りオペレーションが生成されます。インスタンスでコールド・ホットデータ分離を有効にした場合、コールドストレージにおける容量ストレージの読み取りスロットリングを監視してください。コールドストレージでのスロットリングされた読み取りは、インデックス構築の速度を低下させ、書き込みオペレーションにバックプレッシャーを引き起こす可能性があります。

構文

CREATE INDEX [IF NOT EXISTS] [index_identifier]
  [USING {KV | SEARCH | COLUMNAR}]
  ON table_identifier '(' index_key_expression ')'
  [INCLUDE '(' column_identifier (, column_identifier)* ')']
  [PARTITION BY partition_definition]
  [{ASYNC | SYNC}]
  [WITH '(' index_options ')']

サブプロダクション:

index_key_expression  ::= index_key_definition (, index_key_definition)*
                        | wildcard_string_literal

index_key_definition  ::= column_identifier [DESC]
                        | column_identifier '(' option_definition (, option_definition)* ')'
                        | function_expression

function_expression   ::= Z-ORDER '(' column_identifier (, column_identifier)* ')'
                        | S2 '(' column_identifier, level ')'
                        | CAST '(' column_identifier AS type ')'
                        | MD5 '(' column_identifier ')'
                        | SHA256 '(' column_identifier ')'

partition_definition  ::= {RANGE TIME} '(' column_identifier ')' [PARTITIONS number_literal]
                        | HASH '(' column_identifier (, column_identifier)* ')' [PARTITIONS number_literal]
                        | ENUMERABLE '(' column_identifier (, column_identifier)* ')'

index_options         ::= option_definition (, option_definition)*
option_definition     ::= option_identifier = string_literal

相違点

サポートされる構文要素は、インデックスタイプによって異なります。

構文要素

セカンダリインデックス

検索インデックス

インデックスタイプ (index_method_definition)

✔

✔

インデックスキー式 (index_key_expression)

必須

必須

付加列 (include_expression)

✔

✖

インデックスパーティション (partition_definition)

✖

✔

インデックス構築モード (ASYNC|SYNC)

重要

SYNC ビルドモードは、LindormTable 2.6.3 以降でのみサポートされています。

✔

✔

インデックスプロパティ (index_options)

✔

✔

構文要素

セカンダリインデックス

検索インデックス

USING キーワード

省略可能 (デフォルト: KV)

省略可能

インデックスキー式

必須

必須

INCLUDE

省略可能

サポートされていません

PARTITION BY

サポートされていません

省略可能

ASYNC / SYNC

省略可能

省略可能

WITH インデックスプロパティ

省略可能

省略可能

注意事項

ワイドテーブルごとに、最大 [3] つのセカンダリインデックス、1 つの検索インデックスを作成できます。

インデックスタイプ (USING)

USING キーワードを使用して、インデックスタイプを指定します。省略した場合、デフォルトでセカンダリインデックス (KV) が作成されます。

USING の値

インデックスタイプ

使用するケース

KV (または省略)

セカンダリインデックス

非主キーの等価検索および範囲検索。インスタンスは最大 8 つの同時セカンダリインデックスビルドタスクをサポートします。9 つ目のリクエストは即座に失敗します。

SEARCH

検索インデックス

全文検索、ファジークエリ、多次元フィルタリング、集約、およびページネーション付きのソート。同時ビルドタスク数に制限はありません。事前に検索インデックス機能を有効にする必要があります。検索ノードと Lindorm Tunnel Service (LTS) ノードには料金が発生します。詳細については、「検索インデックスの有効化」をご参照ください。インデックスキーには、少なくとも 1 つの非主キー列を含める必要があります。サポートされているデータ型:DATE、TIME、DECIMAL を除くすべての基本データ型。詳細については、「基本データ型」をご参照ください。

インデックスキー式 (index_key_expression)

1 つ以上の列をインデックスキーとして定義します。複数のインデックスキーを持つインデックスは、複合インデックスです。

インデックスキー定義 (index_key_definition)

セカンダリインデックスの場合、各キー定義は次のいずれかです。

  • 列名。オプションで DESC を指定して降順にすることができます。

  • 関数式 (Z-ORDER、S2、CAST、MD5、または SHA256)

検索インデックスの場合、各キー定義は次のいずれかです。

  • 列名。オプションでインデックスキープロパティを指定できます。

  • 既存のすべての列にインデックスを作成するためのワイルドカード定数 *

検索インデックスキープロパティ (option_definition)

構文 column(property=value, ...) を使用して、列ごとにプロパティを指定します。例:c3(type=text, analyzer=ik)。ALTER INDEX ステートメントを使用してインデックス列を追加する際にも、これらのプロパティを指定できます。

プロパティ

タイプ

説明

indexed

STRING

この列にインデックスを構築するかどうかを指定します。文字列列には転置インデックスが構築され、数値列には BKD-Tree 数値インデックスが構築されます。有効な値:true (デフォルト) または false

rowStored

STRING

元の列値を保存するかどうかを指定します。有効な値:true または false (デフォルト)

columnStored

STRING

列ストアを使用してソートと分析を高速化するかどうかを指定します。有効な値:true (デフォルト) または false

type

STRING

トークン化された全文検索フィールドの場合は text に設定します。analyzer と併用する必要があります。

analyzer

STRING

type=text 列のトークナイザー。有効な値:standard、english、ik、whitespace、comma。type と併用する必要があります。

mapping

STRING

カスタムインデックスキープロパティを JSON 文字列として指定します。Elasticsearch のマッピング構文と互換性があります。Elasticsearch 互換バージョンにのみ適用されます。このキーの他のすべてのプロパティをオーバーライドします。

セカンダリインデックス関数式 (function_expression)

セカンダリインデックスを作成する際、関数式をインデックスキーとして指定できます。

重要

MD5 および SHA256 関数式には、LindormTable 2.6.7.5 以降が必要です。アップグレードできない場合は、DingTalk (ID: s0s3eg3) で Lindorm テクニカルサポートにお問い合わせください。

関数

構文

使用するケース

Z-ORDER

Z-ORDER(col1, col2, ...)

時空間セカンダリインデックス。列は時空間データ型である必要があります。詳細については、「時空間インデックス」をご参照ください。

S2

S2(col, level)

POLYGON または MULTIPOLYGON 列の S2 グリッドインデックス。level の範囲は 1~30 です。詳細については、「S2インデックス関数」をご参照ください。

CAST

CAST(col AS type)

データ型変換の結果に対するインデックス。詳細については、「基本データ型」をご参照ください。

MD5

MD5(col)

VARCHAR 列の MD5 エンコード値に対するインデックス。LindormTable 2.6.7.5 以降が必要です。詳細については、「MD5関数」をご参照ください。

SHA256

SHA256(col)

VARCHAR 列の SHA256 エンコード値に対するインデックス。LindormTable 2.6.7.5 以降が必要です。詳細については、「SHA256関数」をご参照ください。

ワイルドカード定数 (wildcard_string_literal)

ワイルドカード定数 * は、検索インデックスでのみサポートされます。* を使用すると、ステートメント実行時に存在するすべての列にインデックスが構築されます。

CREATE INDEX IF NOT EXISTS idx5 USING SEARCH ON test(*);
重要
  • ステートメント実行後に追加された列は、自動的にはインデックス化されません。ALTER INDEX を使用して手動で追加してください。

  • 動的カラムは含まれません。詳細については、「動的カラム」をご参照ください。

付加列 (INCLUDE)

INCLUDE 句は、主テーブルから非キー列をインデックステーブルに追加し、カバリングインデックスを形成します。インデックスにヒットするクエリは、主テーブルを参照せずに付加列の値を取得でき、読み取りパフォーマンスが向上します。

セカンダリインデックスの場合、WITH キーワードを使用して INDEX_COVERED_TYPE を設定することで、動的カラムを含めることができます。詳細については、「セカンダリインデックス」をご参照ください。

インデックスパーティション (PARTITION BY)

インデックスパーティショニングは、検索インデックスでのみサポートされます。サーバーがデータを自動的に分割して保存します。クエリ時には、システムがパーティションプルーニングを適用して、無関係なパーティションをスキップします。

サポートされるパーティションタイプ:RANGE および HASH。詳細については、「パーティションインデックス」をご参照ください。

インデックス構築モード (ASYNC | SYNC)

ASYNC または SYNC を指定して、ステートメントが返されるタイミングを制御します。

モード

動作

ステートメントはブロックされますか?

ステートメント完了後すぐにインデックスを使用できますか?

使用するケース

ASYNC (LindormTable 2.6.1 以降のデフォルト)

ビルドタスクの開始後、即座に返されます。

いいえ

いいえ — ビルドはバックグラウンドで継続されます。

本番環境。インデックス構築中も書き込みは影響を受けずに継続されます。

SYNC

ビルドタスクの完了後にのみ返されます。

はい

はい

スキーマ移行スクリプト、テスト、次のステップの前にインデックスが準備完了している必要がある場合。

重要

SYNC には LindormTable 2.6.3 以降が必要です。

次の表は、各インデックスタイプがサポートするモードを示しています。2 種類のセカンダリインデックスと検索インデックスがサポートしています。2 種類

構築モード

セカンダリインデックス

検索インデックス

ASYNC (LindormTable 2.6.1以降のデフォルト)

サポートされています

サポートされています

SYNC (LindormTable 2.6.3以降が必要)

サポートされています

サポートされています

インデックス構築モード

セカンダリインデックス

検索インデックス

ASYNC

重要

LindormTable 2.6.1 以降、CREATE INDEX ステートメントのデフォルトのインデックス構築モードは非同期になりました。

✖

✖

SYNC

重要

LindormTable 2.6.3 以降でのみ同期インデックス構築がサポートされています。

✖

✔

インデックスプロパティ (WITH)

セカンダリインデックスプロパティ

プロパティ

タイプ

説明

COMPRESSION

STRING

インデックステーブルの圧縮アルゴリズム。有効な値:SNAPPY、ZSTD、LZ4

INDEX_COVERED_TYPE

STRING

付加列の冗長化方法。COVERED_ALL_COLUMNS_IN_SCHEMA:事前定義されたすべての非主キー列を含めます。COVERED_DYNAMIC_COLUMNS:事前定義されたすべての非主キー列と動的カラムを含めます。設定した場合は、INCLUDE 句を省略してください。動的カラムを含める前に、動的カラム機能を有効にしてください。詳細については、「動的カラム」をご参照ください。

STARTKEY

STRING

インデックステーブルの開始キー。タイムスタンプまたは空間データ型の列には設定できません。

ENDKEY

STRING

インデックステーブルの終了キー。タイムスタンプまたは空間データ型の列には設定できません。

NUMREGIONS

INTEGER

インデックステーブルの事前パーティション数。タイムスタンプまたは空間データ型の列には設定できません。

検索インデックスプロパティ

プロパティ

タイプ

説明

indexState

STRING

インデックスの初期状態。有効な値:ACTIVE (利用可能)、INACTIVE (利用不可)、DISABLED (無効)

numShards

INTEGER

シャード数。デフォルト:検索ノード数の 2 倍。各シャードを 3,000 万~1 億行、30~50 GB の範囲に保ってください。シャードが 20 億行を超えると、システムの安定性に影響します。本番インデックスを作成する前に、シャード数を計画してください。大幅なボリューム増加が見込まれる時系列データ (注文やログなど) の場合は、代わりに時間パーティションインデックスを使用してください。

RANGE_TIME_PARTITION_START

INTEGER

履歴データ用に、インデックス作成前の何日前からパーティションの作成を開始するかを指定します。履歴データのタイムスタンプがパーティション開始時刻より前の場合、エラーが発生します。時間パーティションインデックスを作成する場合は必須です。

RANGE_TIME_PARTITION_INTERVAL

INTEGER

新しいパーティション間の間隔 (日数)。たとえば、7 に設定すると、毎週新しいパーティションが作成されます。時間パーティションインデックスを作成する場合は必須です。

RANGE_TIME_PARTITION_TTL

INTEGER

データの保持期間 (日数)。たとえば、180 に設定すると、6 か月分のデータが保持され、それより古いパーティションは自動的にクリアされます。設定しない場合、データはクリアされません。時間パーティションインデックスを作成する場合は必須です。

RANGE_TIME_PARTITION_MAX_OVERLAP

INTEGER

許容される将来のタイムスタンプオフセットの最大値 (日数)。デフォルト:1 日

RANGE_TIME_PARTITION_FIELD_TIMEUNIT

LONG

時間パーティションフィールドの単位。デフォルト:ミリ秒 (ms)。単位が秒 (s) の場合、フィールド値は 10 桁である必要があります。単位がミリ秒 (ms) の場合、13 桁である必要があります。

RANGE_TIME_PARTITION_CHS

INTEGER

ホット/コールドデータ分離の境界 (秒数)。たとえば、864000 に設定すると、10 日より古いデータがコールドストレージにアーカイブされます。設定しない場合、このインデックスではホット/コールドデータ分離は有効化されません。

INDEX_SETTINGS

STRING

カスタムインデックスプロパティを JSON 文字列として指定します。Elasticsearch のインデックス設定構文と互換性があります。Elasticsearch 互換バージョンにのみ適用されます。

SOURCE_SETTINGS

STRING

インデックス列の元データ保存ポリシーを、Elasticsearch の _source 設定と互換性のある JSON 文字列として指定します。デフォルトでは、検索インデックスは元の列データを保存しません。検索エンジンの可視化 UI を通じて直接データクエリを実行する必要がある場合にのみ、このパラメーターを設定してください。詳細については、「データクエリ」をご参照ください。サポートされるパラメーター:enabled (ブール値。true はすべての列を保存、false は保存しない。includes または excludes と併用不可)、includes (文字列配列。元データを保存する列。* ワイルドカードをサポート)、excludes (文字列配列。元データを除外する列。* ワイルドカードをサポート)

例

すべての例では、次のプライマリ テーブルを使用します:

CREATE TABLE test (
  p1 VARCHAR NOT NULL,
  p2 INTEGER NOT NULL,
  c1 BIGINT,
  c2 DOUBLE,
  c3 VARCHAR,
  c4 TIMESTAMP,
  c5 GEOMETRY(POINT),
  PRIMARY KEY(p1, p2)
) WITH (CONSISTENCY = 'strong', MUTABILITY='MUTABLE_LATEST');

セカンダリインデックス

インデックスの非同期ビルド

デフォルトのモードは ASYNC です。ステートメントはすぐに戻ります。

CREATE INDEX idx1 ON test(c1 DESC) INCLUDE(c3, c4) WITH (COMPRESSION='ZSTD');

結果を確認します:

SHOW INDEX FROM test;

複合インデックスの同期作成

CREATE INDEX idx1 ON test(c1, c2, c3) INCLUDE(c4) SYNC WITH (COMPRESSION='ZSTD');

結果を確認します:

SHOW INDEX FROM test;

時空間セカンダリインデックスの作成

CREATE INDEX idx ON roads (Z-ORDER(g1));
CREATE INDEX idt ON roads (Z-ORDER(g1, t));

詳細については、「時空間インデックス」をご参照ください。

すべての定義済み列の包含

CREATE INDEX idx1 ON test(c4 DESC) WITH (INDEX_COVERED_TYPE='COVERED_ALL_COLUMNS_IN_SCHEMA');

結果を確認します:

SHOW INDEX FROM test;

すべての動的な列の包含

CREATE INDEX idx1 ON test(c4 DESC) WITH (INDEX_COVERED_TYPE='COVERED_DYNAMIC_COLUMNS');

結果を確認します:

SHOW INDEX FROM test;

インデックス テーブルの事前パーティションの設定

32 個の事前パーティションを持つインデックスを作成します。

CREATE INDEX idx1 ON test(c4 DESC) INCLUDE(c5) WITH (NUMREGIONS='32');

結果を確認します:

SHOW INDEX FROM test;

事前パーティションでの開始キーと終了キーの設定

11111111 と 9999999 の間に、32 個の事前パーティションを持つインデックス テーブルを作成します。

CREATE INDEX idx1 ON test(c3 DESC) INCLUDE(c5)
WITH (NUMREGIONS='32', STARTKEY='11111111', ENDKEY='9999999');

結果を確認します:

SHOW INDEX FROM test;

Z オーダーセカンダリインデックスの作成

CREATE INDEX idx1 ON test(Z-ORDER(c5));

結果を確認します:

SHOW INDEX FROM test;

S2 グリッドセカンダリインデックスの作成

S2 インデックスは非同期ビルドのみをサポートします。インデックスを作成した後、BUILD INDEX を実行してビルドを開始します。

CREATE INDEX idx1 ON test(S2(c5, 10));
BUILD INDEX idx1 ON test;

結果を確認します:

SHOW INDEX FROM test;

データ型変換後の列のインデックス作成

列 c3 を INTEGER に変換し、その結果にセカンダリインデックスを作成します。

CREATE INDEX idx1 ON test(CAST(c3 AS INTEGER));

結果を確認します:

SHOW INDEX FROM test;

検索インデックス

検索インデックスの非同期ビルド

CREATE INDEX IF NOT EXISTS idx2 USING SEARCH ON test(p1, p2, c1, c2, c3);

結果を確認します:

SHOW INDEX FROM test;
ビルドの進捗を確認するには、「検索インデックスの完全なビルド進捗の表示」をご参照ください。

すべての列のインデックス作成

列のプロパティが指定されていない場合、デフォルト値が適用されます。

CREATE INDEX IF NOT EXISTS idx2 USING SEARCH ON test('*');
ビルドの進捗を確認するには、「検索インデックスの完全なビルド進捗の表示」をご参照ください。

インデックス キー プロパティの追加

すべての列にインデックスを作成し、列 c3 を IK 形態素解析用に設定します:

CREATE INDEX IF NOT EXISTS idx2 USING SEARCH ON test('*', c3(type=text, analyzer=ik, indexed=true));

列 c3 に Elasticsearch 互換のカスタムマッピングを使用するには:

CREATE INDEX IF NOT EXISTS idx2 USING SEARCH ON test('*', c3(mapping='{
  "type": "text",
  "analyzer": "ik_max_word"
}'));
重要

mapping パラメーターは Elasticsearch 互換バージョンにのみ適用され、その列の他のすべてのプロパティを上書きします。

ビルドの進捗を確認するには、「検索インデックスの完全なビルド進捗の表示」をご参照ください。

インデックスの状態とシャード数の設定

CREATE INDEX IF NOT EXISTS idx2 USING SEARCH ON test(c1, c3(type=text, analyzer=ik))
WITH (indexState=ACTIVE, numShards=4);
ビルドの進捗を確認するには、「検索インデックスの完全なビルド進捗の表示」をご参照ください。

カスタムインデックスの設定

ZSTD 圧縮と 10 秒の更新間隔を持つ検索インデックスを作成します:

CREATE INDEX IF NOT EXISTS idx2 USING SEARCH ON test(c1, c3(type=text, analyzer=ik))
WITH (indexState=ACTIVE, INDEX_SETTINGS='{
  "index": {
    "codec": "zstd",
    "refresh_interval": "10s"
  }
}');
ビルドの進捗を確認するには、「検索インデックスの完全なビルド進捗の表示」をご参照ください。

時間パーティション検索インデックスの作成

列 c4 でパーティション分割し、30 日前から開始し、7 日ごとに新しいパーティションを作成し、90 日の保持期間を設定します。

CREATE INDEX IF NOT EXISTS idx2 USING SEARCH ON test(c1, c2, c3, c4)
PARTITION BY RANGE TIME(c4) PARTITIONS 16
WITH (
  indexState=ACTIVE,
  RANGE_TIME_PARTITION_START='30',
  RANGE_TIME_PARTITION_INTERVAL='7',
  RANGE_TIME_PARTITION_TTL='90',
  RANGE_TIME_PARTITION_MAX_OVERLAP='90'
);
ビルドの進捗を確認するには、「検索インデックスの完全なビルド進捗の表示」をご参照ください。

検索インデックスへの生データの格納

デフォルトでは、検索インデックスはデータをフィルタリングしますが、列の生データは格納しません。検索エンジンを介して直接クエリを実行するには、生データの格納を有効にする必要があります。

すべてのインデックス 列を格納する場合:

CREATE INDEX idx2 USING SEARCH ON test(c1, c2, c3, c4)
WITH (SOURCE_SETTINGS='{
  "enabled": true
}');

結果を確認します:

SHOW INDEX FROM test;

列のサブセット (c2、c3、c4、c1 を除く) を格納する場合:

CREATE INDEX idx2 USING SEARCH ON test(c1, c2, c3, c4)
WITH (SOURCE_SETTINGS='{
  "includes": ["c*"],
  "excludes": ["c1"]
}');

結果を確認します:

SHOW INDEX FROM test;
ビルドの進捗を確認するには、「検索インデックスの完全なビルド進捗の表示」をご参照ください。