アプリケーションで、TimesTen問合せオプティマイザによる実行計画の生成を変更できるようにします。フラグを設定して、様々なアクセス方法の使用を有効または無効にします。このコールによって加えらた変更はただちに有効になり、現在のトランザクションにおける、ODBC関数SQLPrepareおよびSQLExecDirectへの後続のすべてのコール、JDBCメソッドConnection.prepareCallおよびStatement.executeへの後続のすべてのコールに影響します。新しいトランザクションを開始するたびに、すべてのオプティマイザ・フラグはデフォルト値にリセットされます。AutoCommitがオンになっている状態でオプティマイザ・フラグを設定しても、各文は固有のトランザクション内で実行されるため、そのフラグは無視されます。
ttOptSetFlagには、次のパラメータがあります。
オプティマイザ・フラグを設定する場合は、次の文字列を使用します。大文字と小文字は区別されません。
SELECT、UPDATEまたはDELETE文の最初の行の最適化を有効または無効にします。SQLキーワードのFIRSTがSQL文で使用された場合、これはオプティマイザ・ヒントより優先されます。キーワードのFIRSTは、最初の行の最適化を有効にします。第II部「TimesTen SQLリファレンス・ガイド」を参照してください。 |
|
GenPlan | 残りのトランザクションでのPLAN表のエントリの作成を有効または無効にします。TimesTenの開発者ガイドの計画の生成に関する項を参照してください。 |
Hash | 索引付けされた表スキャンで、既存のハッシュ索引の使用を許可または禁止します。 |
MergeJoin | 2つの表を結合する方法を示します。結合の入力ストリームがソートされている場合に使用可能です。たとえば、Tツリー索引スキャンが使用される場合などです。 |
NestedLoop | 2つの表を結合する一般的な方法を示します。 |
PassThrough | キャッシュ接続アプリケーションのパススルー・レベルを一時的に変更します。パススルー・レベルはいつでも設定が可能で、変更はただちに有効になります。このフラグに有効な値は次のとおりです。 0: SQL文はTimesTenに対してのみ実行されます。 1: INSERT、DELETE、UPDATEおよびDDL以外の文がTimesTenで構文エラーを生成する場合、またはこれらの文で参照されている1つ以上の表がTimesTenに存在しない場合、INSERT、DELETE、UPDATEおよびDDL以外の文が渡されます。対象の表がTimesTenで見つからない場合、すべてのINSERT、DELETEおよびUPDATE文が渡されます。DDL文は渡されません。 2: 1と同じ動作に加え、READONLYのキャッシュ・グループ表に対して実行されたすべてのINSERT、UPDATEおよびDELETE文が渡されます。 3: COMMIT、ROLLBACK、SAVEPOINT以外のすべてのSQL文と、オプティマイザ・フラグを設定または取得するTimesTen組込みプロシージャが渡されます。 トランザクションの最後に、パススルー・レベルは元の値にリセットされます。 |
RowLock | オプティマイザによる行ロックの使用を許可または禁止します。 |
Scan | 全表スキャンを示します。 |
Rowid | Row IDの使用を許可または禁止します。 |
TmpHash | 一時的なハッシュ・スキャンの使用を許可または禁止します。これは、文の評価で使用するために実行時に作成される索引です。索引の作成には時間がかかりますが、結合条件を評価する場合の時間を節約できます。 |
TblLock | オプティマイザによる表ロックの使用を許可または禁止します。 |
TmpTable | 中間結果を一時表に格納します。この処理は、結合問合せでの条件の評価を繰り返し実行することを回避したり、結合における中間結果のスキャンを単に高速化するために選択されることもあります。 |
TmpTtree | 一時的なTツリー・スキャンを実行します。また、マージ結合で値をソートするためにも使用できます。索引の作成には時間がかかりますが、結合条件を評価する場合の時間を節約できます。 |
Ttree | 索引付けされた表スキャンで、既存のTツリー索引の使用を許可または禁止します。 |
文字列AllFlagsは、すべてのオプティマイザ・フラグを示すために使用され、文字列Defaultは、デフォルトのフラグを示すために使用されます。デフォルトには、GenPlanフラグ以外のすべてのオプティマイザ・フラグが含まれます。
各フラグの値は1または0です。
たとえば、アプリケーションで、中間結果を格納する計画をオプティマイザが選択できないようにできます。
ttOptSetFlag ( 'TmpTable', 0 )同様に、アプリケーションでMergeJoinのプリファレンスを指定できます。
ttOptSetFlag ( 'NestedLoop', 0 )2つ目の例では、マージ結合が不可能な場合(たとえば、マージ結合条件がない場合)、オプティマイザはネステッド・ループ・ジョインを選択できます。同様に、オプティマイザが、表スキャンを回避するアプリケーション・リクエストを満たすことができない場合もあります(スキャン・フラグが0に設定されている場合)。
特定の処理が特定の計画手順で禁止される、特定の2つの表では必ず特定の結合方法が使用されると指定することはできません。同様に、特定の索引が使用される、特定の条件を評価するためにハッシュ索引が使用されると指定することもできません。各処理は、完全に許可されているか、制限付きで許可されています。
コマンドが準備されている場合は、現在のオプティマイザ・フラグ、索引ヒントおよび結合順序はコマンドのコンパイル済形式の構造で保持され、システムによってそのコマンドが再準備されるときに使用されます。再準備された文の例については、TimesTenの開発者ガイドのTimesTen問合せオプティマイザの章を参照してください。
RowLockおよびTblLockの両方が無効な場合、TimesTenでは行ロックが使用されます。RowLockおよびTblLockの両方が有効な場合、TimesTenでは、パフォーマンスがより高い方のロック・スキームが使用されます。
TblLockの状態 RowLockの状態 オプティマイザへの影響 Disabled Disabled 行レベル・ロックを使用します。 Enabled Disabled 表レベル・ロックを使用します。 Disabled Enabled 行レベル・ロックを使用します。 Enabled Enabled 行レベル・ロックまたは表レベル・ロックをオプティマイザが選択します。問合せによって表の行の重要な部分がアクセスされる場合、またはその表に同時アクセスしているトランザクションの数が非常に少ない場合(あるいはその両方)に、表レベル・ロックは有効です。
ttOptSetFlagは結果を返しません。
ttOptEstimateStats
ttOptGetFlag
ttOptGetOrder
ttOptSetColIntvlStats
ttOptSetOrder
ttOptSetTblStats
ttOptUpdateStats
ttOptUseIndex