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';
親トピック: JSONデータの索引