ヘッダーをスキップ

Oracle TimesTen In-Memory Databaseアーキテクチャ概要 リリース6.0 B25763-01 |
| 目次 | 索引

前へ | 次へ |

## 結合方法

オプティマイザは複数のタイプの結合方法から選択できます。2つの表の行を結合する場合は、一方の表を外部表、他方の表を内部表に指定します。結合中に、オプティマイザは外部表と内部表の行をスキャンして、結合条件に一致する行を検索します。

オプティマイザは各表の統計を分析します。たとえば、オプティマイザは、最小の表、または問合せについて最高の選択性を持つ表を外部表として識別します。結合する1つ以上の表に索引が存在する場合、オプティマイザでは外部表と内部表を選択する際にそれらを考慮します。

3つ以上の表を結合する場合、オプティマイザは表のペアについて様々な結合の組合せを分析し、最初に結合するペア、次にその結合の結果によって結合する表など、最適な結合の順序を判断します。

結合のコストは、内部表と外部表にアクセスして、結合条件に一致する行を検索する方法に大きく影響されます。オプティマイザは次の2つの結合方法から選択できます。

- ネステッド・ループ結合
- マージ結合

## ネステッド・ループ結合

索引のないネステッド・ループ結合では、外部表の行が一度に1行ずつ選択され、内部表のすべての行と一致するか確認されます。内部表のすべての行が、外部表の行数と同じ回数スキャンされます。内部表の結合列に索引がある場合、その索引は結合条件を満たす行の選択に使用されます。各表から結合条件を満たす行が返されます。処理中に、索引がネステッド・ループの内部表に対して作成され、内部スキャンの結果が結合の前にマテリアライズされる可能性があります。

図6.3 ネステッド・ループ結合

## マージ結合

マージ結合は、結合列がTツリー索引でソートされる場合にのみ使用されます。マージ結合では、カーソルが各索引を一度に1行ずつ進みます。行はすでに各索引の結合列でソートされているため、簡単な式を適用することにより、単一のスキャンでカーソルが各行を効率的に進みます。式は次のようになります。

- 内部.結合列 < 外部.結合列 -- 内部カーソルを進める
- 内部.結合列 = 外部.結合列 -- 一致を読み取る
- 内部.結合列 > 外部.結合列 -- 外部カーソルを進める

ネステッド・ループ結合と異なり、外部表の各行について内部表全体をスキャンする必要はありません。マージ結合が使用できるのは、問合せを準備する前に、CREATE INDEX文によって表にTツリー索引が作成されている場合です。問合せを準備する前に、結合する表にTツリー索引が存在しない場合、状況によっては、オプティマイザがマージ結合を使用するために、一時Tツリー索引を作成する可能性もあります。

図6.4 マージ結合