このページでは、検索とセカンダリ インデックスの機能について説明します。
検索インデックスとセカンダリ インデックスのどちらを使用するかを判断する際は、検索インデックスがフルテキストのユースケースのデフォルトの選択肢であり、セカンダリ インデックスがそれ以外のすべてのユースケースのデフォルトの選択肢であることを覚えておいてください。次の表に、各タイプのインデックスを使用するタイミングを示します。
機能 | セカンダリ インデックス | 検索インデックス |
---|---|---|
並べ替え順 | インデックスはすべてのインデックス キー列で並べ替えられます。 | 検索インデックスは、ユーザーが制御する INT64 列で最大 2 つだけ並べ替えることができます。 |
配列 | 配列はセカンダリ インデックスのキーとしてはサポートされていません。 | 検索インデックスは配列インデックスをサポートしています。ドキュメント内のすべてのトークンは、同じスプリットに配置されます。その結果、1 行を変更するトランザクションは、1 つのインデックス スプリットにのみ書き込みます。 |
ルックアップ | インデックス キーによるルックアップでは、1 つのスプリットにのみアクセスする必要があります | 検索インデックスを使用するクエリは通常、特定のパーティションのすべてのスプリットから読み取る必要があります。唯一の例外は、Top-K パターン マッチングです。 |
複数列インデックス | セカンダリ インデックスには複数のキー列を含めることができます。クエリを効率的に実行するには、インデックス キー列の接頭辞でデータを検索する必要があります。 | 検索インデックスには複数の列をインデックスに登録できます。クエリでは、インデックスに登録された列のサブセットに対して複雑な論理式(連結、論理和、否定)を指定しても、効率的に実行できます。 |
インデックスの交差 | ユーザーは、複数のセカンダリ インデックスを結合するようにクエリを書き換えることができます。 | 複数のインデックス付き列の交差は、効率的なローカル ジグザグ結合として実装され、その後に分散マージ ユニオン(関連するすべてのスプリットの結果を組み合わせる)が実行されます。 |
データの読み取り | SQL Query API または Read API | SQL クエリ |
セマンティクス以外にも、検索インデックスを作成する DDL ステートメントの構文は、セカンダリ インデックスを作成する DDL 構文とは異なります。
- インデックス付きの列は、検索インデックスの並べ替え順序とは別に定義されます。
CREATE SEARCH INDEX
ステートメントのON
句のTOKENLIST
列の順序は重要ではありません。
次のステップ
- 検索インデックスについて学習する。
- セカンダリ インデックスについて学習する。