30.10 コンポジットBツリー索引を使用した複数のJSONフィールドの索引付け

JSONオブジェクトの複数のフィールドに索引を付けるには、SQL/JSONファンクションjson_valueまたはドット表記法構文で複数のパス式を使用してコンポジットBツリー索引を作成できます。

例30-21に、これを示します。対応するJSONデータ(オブジェクト・フィールド)を参照するSQL問合せでは、コンポジット索引が選択されます。例30-22に、これを示します。

または、索引付けするJSONオブジェクトのフィールドの仮想列を作成し、それらの仮想列にコンポジットBツリー索引を作成できます。その場合、仮想列または対応するJSONデータ(オブジェクト・フィールド)を参照するSQL問合せでは、コンポジット索引が選択されます。問合せパフォーマンスはどちらの場合も同じです。

問合せのパフォーマンスを向上させるために実装された索引に、データが論理的に依存することはありません。この実装からの独立をコードに反映するには、(仮想列ではなく)データを直接問い合せます。このようにすることにより、問合せは索引の有無とは関係なく同様に機能します。この場合、索引はパフォーマンスの向上に特化して機能します。

例30-21 JSONオブジェクト・フィールドのコンポジットBツリー索引の作成

CREATE INDEX user_cost_ctr_idx ON
  j_purchaseorder(json_value(data, '$.User'
                             RETURNING VARCHAR2(20),
                  json_value(data, '$.CostCenter'
                             RETURNING VARCHAR2(6)));

例30-22 コンポジットBツリー索引を使用して索引付けされたJSONデータの問合せ

SELECT data FROM j_purchaseorder
  WHERE json_value(data, '$.User')       = 'ABULL'
    AND json_value(data, '$.CostCenter') = 'A50';