2017-11-14 26 views
0

ネストループ・ジョインでは、索引駆動または運転を作成する必要がある表を誰かが助けてくれますか?どのテーブルをどのようにしてテーブルを駆動し、どのテーブルを駆動するのかを見つけることができますか?Oracle SQLの駆動テーブルと駆動テーブル

答えて

0

ネステッド・ループ結合 - 小さなテーブルには、駆動表で、大きなテーブルには、駆動テーブル

「駆動」テーブルは、私たちがFROM参加するテーブルです - 他のテーブルに参加することです。あなたは、クエリを持って言うことができますたとえば、:

select * from emp, dept where emp.deptno = dept.deptno; 

この場合、駆動表はDEPTかもしれないが、我々はフルスキャンにDEPTから行をフェッチして、一致EMP内の行を見つけるだろう。 DEPTは運転台です。

多くの要因を使って作られた運転台の選択。たとえば、上記の問合せでDEPT(DEPTNO)に索引があってEMP(DEPTNO)でない場合は、EMPから行をフェッチしてからDEPT(DEPTNO)索引を使用してEMPを駆動表に使用します。 - 一致をDEPTテーブルで見つける。表のサイズ、列の値の基数などは、運転テーブルの選択に影響を与えます(例:HINTS)。

ルールベースオプティマイザを使用する場合は、FROM句にテーブルを配置することが適切です。 from節を右から左に処理します。FROMリストの最後から運転台を選ぶ傾向があります。コストベースオプティマイザには、これも同様に起こることを示すヒントがあります。

CBOを使用している場合、テーブルの順序は関係ありません(ヒントがない限り)。統計とデータ辞書を使用して、どのテーブルが運転テーブルとして使用されるのが最適かを判断します。

はまた

次の2つのテーブルの結合を実行、一つのテーブルには、「駆動表」です。駆動テーブルは、Oracleが最初にジョインで処理するテーブルです。 Oracleは運転テーブル内のレコードを読み取り、他のテーブル内の一致するレコード(結合条件によって決定)を検索しようとします。

+0

ルールベースのオプティマイザは、Oracleでは少なくとも15年間は関連していません。 –

関連する問題