オプティマイザ・ヒント

オプティマイザ・ヒントは、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 VERBの後に指定します。

ヒントは、ttOptSetFlagまたはttOptSetOrder、あるいはttOptUseIndex組込みプロシージャをコールして指定します。

ヒントは、OptimizerHint一般接続属性で指定します。

ヒントはSQL文を範囲とします。

ヒントはトランザクションを範囲とします。

ヒントは接続を範囲とします。

autocommit設定は無効になります。ヒントが含まれる文の実行後は、それ以降の文および問合せではそのヒントは無効になります。

autocommit設定は有効になります。autocommitをオフに設定する必要があります。こうすると、ヒントがトランザクションの期間中、(コミットまたはロールバックを発行するまで)有効になります。autocommitをオフに設定しない場合、文は独自のトランザクションで実行され、ヒントはその文にのみ影響します。

autocommit設定は無効になります。ヒントは、接続の期間中、有効になります。

オプティマイザは、文に対してのみヒントを考慮します。

オプティマイザは、トランザクションのすべての文に対してヒントを考慮します。

オプティマイザは、接続のすべての文に対してヒントを考慮します。

ヒントは、CREATE TABLE...AS SELECT文でサポートされます。

ヒントはCREATE TABLE...AS SELECT文ではサポートされません。これはDDL文であり、TimesTenが暗黙的にDDL文をコミットします。

ヒントはCREATE TABLE...AS SELECT文ではサポートされません。これはDDL文であり、TimesTenが暗黙的にDDL文をコミットします。

トランザクション・レベルのオプティマイザ・ヒントまたは接続レベルのオプティマイザ・ヒントが指定されたトランザクションで文レベルのオプティマイザ・ヒントを指定すると、そのヒントは、SQL文のトランザクション・レベルのヒントまたは接続レベルのオプティマイザ・ヒントをオーバーライドします。TimesTenによってSQL文が実行された後、次のようになります。

  • 元のトランザクション・レベルのオプティマイザ・ヒントは、トランザクションの期間中も有効なままです

  • 元の接続レベルのオプティマイザ・ヒントは、接続の期間中も有効なままです。

ヒントは、トランザクションの期間中、有効になります。SQL文で文レベルのオプティマイザ・ヒントを指定すると、文レベルのオプティマイザ・ヒントはその文に対して有効となり、オプティマイザはその文にトランザクション・レベルのヒントを使用しません。文の実行後、元のトランザクション・レベルのオプティマイザ・ヒントは、トランザクション中、有効のままです。

このレベルで指定されたヒントは、接続レベルで指定された同じヒントよりも優先されます。

ヒントは、接続の期間中、有効になります。優先順位は、文レベル、トランザクション・レベル、および接続レベルとなります。

特定の文に対してオプティマイザを有効にするには、文レベルのオプティマイザ・ヒントを使用します。オプティマイザに影響を与える文ごとにヒントを指定する必要があります。文に対して複数の変更が生じる場合があります。

トランザクションのすべての文に対してオプティマイザを適用するには、トランザクション・レベルのオプティマイザ・ヒントを使用します。ヒントを文ごとに指定する必要はありません。ヒントは、トランザクション内のすべての文に適用されます。ヒントは、文レベルでヒントを指定することで無効にできます。

接続のすべての文に対してオプティマイザを適用するには、接続レベルのオプティマイザ・ヒントを使用します。ヒントは、トランザクションまたは文レベルでヒントを指定することで無効にできます。