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
);

この例では、一意性を強制し、フィールドが存在する行のみが含まれる(SPARSEがデフォルト) purchasedに対して単一値索引を定義します。