JSON索引作成のための簡略化されたドット表記法構文
従来、JSONデータに対する索引の作成には、詳細なエラー処理仕様を伴う複雑で冗長なSQL/JSON構文が必要だったため、プロセスが困難になり、エラーの影響を受けやすくなりました。
新しい簡略化されたドット表記法構文では、このような問題に対処するために、直感的で使い慣れたドット表記法を使用して、索引付けするJSONフィールドを正確に指定でき、基礎となる技術的な詳細を定義する必要がなくなります。この合理化されたアプローチにより、索引定義が読みやすくなり、実装が速くなり、ミスが発生しにくくなります。簡略化された構文は、複数値索引(配列または繰返しフィールドに索引付け)と単一値索引(スカラー・フィールドに索引付け)の両方に適用されます。既存の索引作成構文は、引き続き完全にサポートされています。
構文
ドット表記法を使用したJSON索引は、次の一般的な形式で作成できます:
CREATE JSON [UNIQUE] [SPARSE | DENSE] [SINGLEVALUE | MULTIVALUE]
INDEX index_name ON table_name [table_alias]
(dot_path [ASC | DESC], [dot_path [ASC | DESC]] ... )
[index_properties];
パラメータとオプション
| パラメータ | 説明 |
|---|---|
JSON |
簡略化されたJSON索引構文の使用をトリガーする必須キーワード。 |
UNIQUE |
指定された索引付きフィールド間で一意性を強制するオプションのパラメータ。 |
SPARSE / DENSE |
オプションのパラメータ。SPARSEは、索引でnull on emptyハンドラが使用されることを示します。DENSEは、索引でpresent on emptyハンドラが使用されることを示します。どちらのキーワードも指定しない場合、SPARSEがデフォルトで使用されます。
|
SINGLEVALUE / MULTIVALUE |
オプションのパラメータ。SINGLEVALUEはスカラー・フィールドに索引を作成し、MULTIVALUEは配列/繰返しに索引を作成します(デフォルト)。
|
INDEX index_name |
作成する索引の名前を指定する必須パラメータ。 |
ON table_name [alias] |
必須パラメータ。索引付けされるJSON列を含む表の名前(およびオプションの別名)。 |
dot_path [ASC|DESC] |
索引付けされるフィールドを指定する1つ以上のドットで区切られたパス。各フィールドには、昇順(ASC)または降順(DESC)を指定できます。
|
index_properties |
オンライン作成のONLINEなど、追加の索引プロパティを指定するオプションのパラメータ。
|
ノート:
- SPARSEもDENSEも指定しない場合、SPARSE動作がデフォルトで使用されます。
- コンポジット索引では、すべてのフィールドが、指定された表の同じJSON列を参照する必要があります。
- 単純なドット表記法のみサポートされており、一般的なSQL式はドット・パスに使用できません。
- 簡略化された構文は、複数値索引に対するBITMAP索引ではサポートされていません。
例30-17 配列またはスカラー・フィールドの索引付け
簡略化された構文により、JSONデータ内のスカラー・フィールドまたは配列要素に直接索引付けができるようになります。配列フィールドの場合は、ドキュメントに表示されているフィールドのパスを使用します。
配列フィールドの索引付け
CREATE JSON INDEX idx_purchased_arr ON mytab t (
t.data.parts.purchased
);
この例では、partsオブジェクト内のpurchased配列に対して複数値索引を作成し、配列内の任意の要素に対して高速な問合せを可能にします。
スカラー・フィールドの索引付け
CREATE JSON SINGLEVALUE INDEX idx_count_scalar ON mytab t (
t.data.parts.count
);
この文では、partsオブジェクトごとにcountフィールドに対して単一値索引を作成し、このスカラー値に基づいて検索を最適化します。
例30-18 コンポジット複数値索引または単一値索引の作成
コンポジット索引を使用すると、同じJSON列内の複数のフィールド(配列またはスカラー)に索引付けできるため、それらのフィールドの組合せに基づいてフィルタ処理する問合せのパフォーマンスが向上します。
コンポジット複数値索引
CREATE JSON INDEX idx_composite_mvi ON mytab t (
t.data.parts.purchased,
t.data.name,
t.data.parts.count
);
この索引は3つのフィールドに対して作成され、フィールドに配列が含まれている場合でも、任意またはすべてのフィールドを含む効率的な検索をサポートします。
コンポジット単一値索引
CREATE JSON SINGLEVALUE INDEX idx_composite_svi ON mytab t (
t.data.parts.purchased,
t.data.name,
t.data.parts.count
);
この例では、同じ3つのフィールドに対して単一値索引を作成します。これは、あらゆるドキュメントで、各フィールドに単一のスカラー値が含まれている場合に役立ちます。
例30-19 順序指定されたコンポジット複数値索引または単一値索引
必要に応じて、索引付きフィールドごとにソート順(昇順または降順)を指定できます。これにより、範囲問合せや順序付けする問合せのパフォーマンスが向上します。
順序指定されたコンポジット複数値索引
CREATE JSON INDEX idx_composite_ordered_mvi ON mytab t (
t.data.parts.purchased DESC,
t.data.name ASC,
t.data.parts.count DESC
);
この例では、purchasedおよびcountに対して降順の、nameに対して昇順の複数値索引を作成します。
順序指定されたコンポジット単数値索引
CREATE JSON SINGLEVALUE INDEX idx_composite_ordered_svi ON mytab t (
t.data.parts.purchased DESC,
t.data.name ASC,
t.data.parts.count DESC
);
同様に、この単一値索引は、最適化されたアクセスのために指定された順序付けを強制します。
例30-20 型強制のための明示的な項目メソッドを使用した索引
項目メソッドをフィールド・パスの最後に追加すると、索引付けされる値のデータ型を強制できます。これにより、問合せの効率が向上し、一貫性が確保されます。
CREATE JSON INDEX idx_type_enforced ON mytab t (
t.data.parts.purchased,
t.data.name.string(),
t.data.parts.count.number()
);
この索引は、name値は文字列として、count値は数値として索引付けされることを強制します。
例30-21 一意および密の複数値索引または単一値索引
UNIQUEキーワードを使用して、索引付けされた値の組合せに対して一意性を強制し、DENSEキーワードを使用して、一部のドキュメントにフィールドがない場合でも索引エントリが存在することを保証します。
一意、密の複数値索引
CREATE JSON UNIQUE DENSE INDEX idx_unique_dense_mvi ON mytab t (
t.data.parts.purchased,
t.data.name,
t.data.parts.count
);
この例では、3つすべてのフィールド間で一意性を強制し、フィールドが欠落している可能性があるエントリが含まれる(DENSE)複数値索引を作成します。
一意、疎の単一値索引
CREATE JSON UNIQUE SPARSE SINGLEVALUE INDEX idx_unique_sparse_svi ON mytab t (
t.data.parts.purchased
);
この例では、一意性を強制し、フィールドが存在する行のみが含まれる(がデフォルト) SPARSEpurchasedに対して単一値索引を定義します。