スキャン方法
オプティマイザは複数のタイプのスキャン方法から選択できます。
最も一般的なスキャン方法は次のとおりです。
-
全表スキャン: 全表スキャンでは、表内のすべての行が調べられます。全体スキャンは通常、問合せ条件を評価する最も非効率的な方法であるため、他の方法を使用できない場合にのみ使用されます。
-
ROWID参照: ROWIDは、表に格納されている各行に対する表内の物理タプルのアドレス(一意のID)です。たとえば、アプリケーションで以前にROWIDを選択し、次に
WHERE ROWID=
句を使用して同じ行をフェッチする場合に、ROWID参照が適用可能です。ROWID参照は索引参照より高速です。ただし、TimesTen Scaleoutは複数のコピーを持つように構成できるため、各コピーには異なる
ROWID
が割り当てられます。ROWID
は行の特定のコピーの識別子であるため、そのコピーを使用できない場合は、ROWID
で行にアクセスできません。この場合は、主キーで行にアクセスする必要があります。『Oracle TimesTen In-Memory Database Scaleoutユーザーズ・ガイド』のデータ配分におけるROWIDの理解を参照してください。
-
(永続索引または一時索引のいずれかにおける)範囲索引スキャン: 範囲索引スキャンでは、表にアクセスするために範囲索引が使用されます。このようなスキャンは、条件に使用する列に範囲索引が定義されている場合にのみ、
t1.a=2
などの完全一致条件またはt1.a>2
やt1.a<10
などの範囲条件に適用できます。範囲索引が複数の列にわたって定義されている場合は、複数の列条件にその範囲索引を使用できます。たとえば、列t1.b
およびt1.c
に範囲索引が定義されている場合、条件t1.b=100
およびt1.c>'ABC'
は範囲索引スキャンになります。索引は、複数の列にわたって定義されている場合でも使用できます。たとえば、t1.b
、t1.c
およびt1.d
に範囲索引が定義されている場合、オプティマイザでは、列b
およびc
の索引の接頭辞が使用され、列b
およびc
に指定した条件に一致する列d
のすべての値が返されます。 -
(永続索引または一時索引における)ハッシュ索引参照: ハッシュ索引参照は、ハッシュ索引を使用して、1つ以上の列で完全一致を使用して行を検索します。このような参照は、指定した1つ以上の列における等価検索に適用されます。
TimesTenでは、ハッシュ索引およびROWID参照を使用して高速に完全一致処理が実行されます。また、範囲索引を介して範囲一致処理が実行されます。問合せ計画の選択時にオプティマイザによる特定のスキャン方法についての検討を実行可能または実行不可にするには、オプティマイザ・ヒントを使用します。