ヘッダーをスキップ
Oracle TimesTen In-Memory Databaseオペレーション・ガイド
リリース7.0
E05167-03
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

問合せオプティマイザ計画の参照および変更

組込みshowplanコマンドを使用すると、TimesTen Data Managerで問合せの実行に使用される問合せオプティマイザ計画が表示されます。また、ttIsqlには、この問合せオプティマイザ計画を変更するための組込み問合せオプティマイザ・ヒント・コマンドが用意されています。showplanコマンドを次に示す組込みコマンドと組み合せて使用すると、最適な実行計画を設計できます。TimesTenの問合せオプティマイザの詳細は、「TimesTen問合せオプティマイザ」および『Oracle TimesTen In-Memory Database C開発者およびリファレンス・ガイド』を参照してください。

showplanコマンドおよび問合せオプティマイザ・ヒント・コマンドを使用する場合は、自動コミット機能が無効である必要があります。自動コミットを無効にするには、ttIsqlのautocommit組込みコマンドを使用します。

次の例では、これらのコマンドを使用して問合せオプティマイザの実行計画を変更する方法を示します。

例5.20

Command> CREATE TABLE T1 (A NUMBER);

Command> CREATE TABLE T2 (B NUMBER);

Command> CREATE TABLE T3 (C NUMBER);

Command>

Command> INSERT INTO T1 VALUES (3);

1 row inserted.

Command> INSERT INTO T2 VALUES (3);

1 row inserted.

Command> INSERT INTO T3 VALUES (3);

1 row inserted.

Command> INSERT INTO T1 VALUES (4);

1 row inserted.

Command> INSERT INTO T2 VALUES (5);

1 row inserted.

Command> INSERT INTO T3 VALUES (6);

1 row inserted.

Command>

Command> autocommit 0;

Command> showplan;

Command> SELECT * FROM T1, T2, T3 WHERE A=B AND B=C AND A=B;

Query Optimizer Plan:

  STEP:        1

  LEVEL:       3

  OPERATION:   TblLkSerialScan

  TBLNAME:     T1

  IXNAME:      <NULL>

  PRED:        <NULL>

  OTHERPRED:   <NULL>

  STEP:        2

  LEVEL:       3

  OPERATION:   TblLkSerialScan

  TBLNAME:     T2

  IXNAME:      <NULL>

  PRED:        <NULL>

  OTHERPRED:   T1.A = T2.B AND T1.A = T2.B

  STEP:        3

  LEVEL:       2

  OPERATION:   NestedLoop

  TBLNAME:     <NULL>

  IXNAME:      <NULL>

  PRED:        <NULL>

  OTHERPRED:   <NULL>

  STEP:        4

  LEVEL:       2

  OPERATION:   TblLkSerialScan

  TBLNAME:     T3

  IXNAME:      <NULL>

  PRED:        <NULL>

  OTHERPRED:   T2.B = T3.C

  STEP:        5

  LEVEL:       1

  OPERATION:   NestedLoop

  TBLNAME:     <NULL>

  IXNAME:      <NULL>

  PRED:        <NULL>

  OTHERPRED:   <NULL>

< 3, 3, 3 >

1 row found.

Command> trytbllocks 0;

Command> tryserial 0;

Command> SELECT * FROM T1, t2, t3 WHERE A=B AND B=C AND A=B;

Query Optimizer Plan:

  STEP:        1

  LEVEL:       3

  OPERATION:   TmpTtreeScan

  TBLNAME:     T1

  IXNAME:      <NULL>

  PRED:        <NULL>

  OTHERPRED:   <NULL>

  STEP:        2

  LEVEL:       3

  OPERATION:   TmpTtreeScan

  TBLNAME:     T2

  IXNAME:      <NULL>

  PRED:        T2.B >= T1.A

  OTHERPRED:   <NULL>

  STEP:        3

  LEVEL:       2

  OPERATION:   MergeJoin

  TBLNAME:     <NULL>

  IXNAME:      <NULL>

  PRED:        T1.A = T2.B AND T1.A = T2.B

  OTHERPRED:   <NULL>

  STEP:        4

  LEVEL:       2

  OPERATION:   TmpTtreeScan

  TBLNAME:     T3

  IXNAME:      <NULL>

  PRED:        <NULL>

  OTHERPRED:   T2.B = T3.C

  STEP:        5

  LEVEL:       1

  OPERATION:   NestedLoop

  TBLNAME:     <NULL>

  IXNAME:      <NULL>

  PRED:        <NULL>

  OTHERPRED:   <NULL>

< 3, 3, 3 >

1 row found.

Command>

この例では、3つの表に対して問合せが実行され、問合せオプティマイザの計画が表示されています。1つ目のバージョンの問合せでは、問合せオプティマイザのデフォルトの実行計画が使用されていますが、2つ目のバージョンでは、trytbllocksおよびtryserial組込みヒント・コマンドを使用して問合せオプティマイザの計画が変更されています。2つ目のバージョンの問合せでは、シリアル・スキャンおよびネステッド・ループ結合ではなく、一時索引スキャンおよびマージ結合が使用されています。

このように、showplanコマンドをttIsqlの組込み問合せオプティマイザ・ヒント・コマンドと組み合せて使用すると、アプリケーション要件を満たすために使用する実行計画を迅速に決定できます。