組込みshowplan
コマンドを使用すると、TimesTen Data Managerで問合せの実行に使用される問合せオプティマイザ計画が表示されます。また、ttIsqlには、この問合せオプティマイザ計画を変更するための組込み問合せオプティマイザ・ヒント・コマンドが用意されています。showplan
コマンドを次に示す組込みコマンドと組み合せて使用すると、最適な実行計画を設計できます。TimesTenの問合せオプティマイザの詳細は、「TimesTen問合せオプティマイザ」および『Oracle TimesTen In-Memory Database C開発者およびリファレンス・ガイド』を参照してください。
showplan
コマンドおよび問合せオプティマイザ・ヒント・コマンドを使用する場合は、自動コミット機能が無効である必要があります。自動コミットを無効にするには、ttIsqlのautocommit
組込みコマンドを使用します。
次の例では、これらのコマンドを使用して問合せオプティマイザの実行計画を変更する方法を示します。
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の組込み問合せオプティマイザ・ヒント・コマンドと組み合せて使用すると、アプリケーション要件を満たすために使用する実行計画を迅速に決定できます。