オプティマイザ・ヒント
オプティマイザ・ヒントは、TimesTenの問合せオプティマイザに渡される命令です。問合せに対して最適な実行計画を選択するとき、オプティマイザではこれらのヒントが考慮されます。ほとんどのヒントは、TimesTen ScaleoutでもTimesTen Classicでもサポートされています。TimesTen Scaleoutでのみサポートされているヒントもあります。詳細は、「TimesTen Scaleoutでのみサポートされているオプティマイザ・ヒント」を参照してください。
TimesTenでは、次の3つのレベルのオプティマイザ・ヒントをサポートしています。
-
文レベルのオプティマイザ・ヒント: 指定した場合、オプティマイザは、特定の文に関するヒントを考慮します。詳細は、「文レベルのオプティマイザ・ヒント」を参照してください。
-
トランザクション・レベルのオプティマイザ・ヒント: (適切な組込みプロシージャのコールによって)指定した場合、オプティマイザは、トランザクション全体に関するヒントを考慮します。『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のオプティマイザ・ヒントを使用した実行計画の変更を参照してください。
-
接続レベルのオプティマイザ・ヒント: 指定した場合、オプティマイザは、接続全体に関するヒントを考慮します。詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の「オプティマイザ・ヒントの使用による実行計画の変更」および『Oracle TimesTen In-Memory Databaseリファレンス』の「OptimizerHint」を参照してください。
オプティマイザ・ヒントの優先順位は、文レベルのヒント、トランザクション・レベルのヒント、および接続レベルのヒントとなります。表6-2に、文、トランザクションおよび接続レベルのオプティマイザ・ヒントの概要を示します。
表6-2 文、トランザクションおよび接続レベルのオプティマイザ・ヒントの概要
| 文レベルのオプティマイザ・ヒント | トランザクション・レベルのオプティマイザ・ヒント | 接続レベルのオプティマイザ・ヒント |
|---|---|---|
|
ヒントは、コメント構文内およびSQL文の |
ヒントは、 |
ヒントは、 |
|
ヒントはSQL文を範囲とします。 |
ヒントはトランザクションを範囲とします。 |
ヒントは接続を範囲とします。 |
|
|
|
|
|
オプティマイザは、文に対してのみヒントを考慮します。 |
オプティマイザは、トランザクションのすべての文に対してヒントを考慮します。 |
オプティマイザは、接続のすべての文に対してヒントを考慮します。 |
|
ヒントは、 |
ヒントは |
ヒントは |
|
トランザクション・レベルのオプティマイザ・ヒントまたは接続レベルのオプティマイザ・ヒントが指定されたトランザクションで文レベルのオプティマイザ・ヒントを指定すると、そのヒントは、SQL文のトランザクション・レベルのヒントまたは接続レベルのオプティマイザ・ヒントをオーバーライドします。TimesTenによってSQL文が実行された後、次のようになります。
|
ヒントは、トランザクションの期間中、有効になります。SQL文で文レベルのオプティマイザ・ヒントを指定すると、文レベルのオプティマイザ・ヒントはその文に対して有効となり、オプティマイザはその文にトランザクション・レベルのヒントを使用しません。文の実行後、元のトランザクション・レベルのオプティマイザ・ヒントは、トランザクション中、有効のままです。 このレベルで指定されたヒントは、接続レベルで指定された同じヒントよりも優先されます。 |
ヒントは、接続の期間中、有効になります。優先順位は、文レベル、トランザクション・レベル、および接続レベルとなります。 |
|
特定の文に対してオプティマイザを有効にするには、文レベルのオプティマイザ・ヒントを使用します。オプティマイザに影響を与える文ごとにヒントを指定する必要があります。文に対して複数の変更が生じる場合があります。 |
トランザクションのすべての文に対してオプティマイザを適用するには、トランザクション・レベルのオプティマイザ・ヒントを使用します。ヒントを文ごとに指定する必要はありません。ヒントは、トランザクション内のすべての文に適用されます。ヒントは、文レベルでヒントを指定することで無効にできます。 |
接続のすべての文に対してオプティマイザを適用するには、接続レベルのオプティマイザ・ヒントを使用します。ヒントは、トランザクションまたは文レベルでヒントを指定することで無効にできます。 |