問合せの最適化での索引の使用

Oracle NoSQL Databaseでは、問合せプロセッサは、使用可能な索引のうち問合せに有効なものを識別し、その索引を利用するように問合せをリライトできます。索引の使用は、そのエントリの連続した部分範囲をスキャンしたり、その部分範囲内のエントリに対してさらにフィルタリング条件を適用したり、関連する表の行を抽出して返すために存続する索引エントリに格納されている主キーを使用することを意味します。スキャンする索引エントリの部分範囲はWHERE句の条件によって決定され、その一部は索引の検索条件に変換される場合があります。索引エントリの(できれば小さい)サブセットのみが検索条件を満たす場合、個々の表の行にアクセスせずに問合せを評価できるため、大量に発生する可能性があるディスク・アクセスを抑制できます。

Oracle NoSQL Databaseでは、主キー索引がデフォルトで常に作成されます。この索引は、表の主キー列を表の行の物理的な位置にマップします。また、使用可能な他の索引がない場合は、主索引が使用されます。つまり、純粋な表スキャン・メカニズムはありません。表スキャンは主キー索引を使用したスキャンと同等です。

索引および問合せについては、問合せプロセッサが次の2つの質問に回答する必要があります。
  1. 索引は問合せに適用可能ですか。つまり、この索引を使用して表にアクセスするほうが、(主索引を使用して)全表スキャンを実行するよりも効率的ですか。
  2. 適用可能な索引の中で、どの索引または索引の組合せを使用するのが最適ですか。

質問(1)に関しては、NESTED TABLESを含む問合せの場合、ターゲット表に対してのみ2次索引が考慮されます。現在の実装では、常に主索引を使用して祖先または子孫表、あるいはその両方にアクセスします。

質問(2)に関しては、現在の実装では、索引の論理積や論理和はサポートされていません。その結果、問合せプロセッサでは常に1つの索引(主キー索引である場合もあります)を使用します。また、表の列またはネストしたフィールドにおける値の数と分布に関する統計はありません。そのため、問合せプロセッサは、適用可能な索引の選択において、単純な経験則に依存するしかありません。また、SQL for Oracle NoSQL Databaseでは問合せに索引ヒントを含めることができ、これは使用する索引についての問合せプロセッサへのユーザー指示として使用されます。