BIND コマンドの REOPT オプションを使用した場合のパフォーマンスの改善

BIND オプション REOPT は、組み込み SQL アプリケーションのパフォーマンスを大幅に改善できます。

静的 SQL における REOPT の影響

BIND オプション REOPT は、ホスト変数、グローバル変数、または特殊レジスターを含む静的 SQL ステートメントを、追加バインド・ステートメントのように動作させることができます。 これは、これらのステートメントが、バインド時ではなく、 EXECUTE または OPEN の時にコンパイルされることを意味します。 このコンパイル時に、これらの変数の実際の値に基づいて、アクセス・プランが選択されます。

REOPT ONCE の場合は、最初の OPEN または EXECUTE 要求の後にアクセス・プランがキャッシュされ、 このステートメントの後の実行で使用されます。 REOPT ALWAYS の場合は、OPEN および EXECUTE 要求のたびにアクセス・プランが再生成され、 現行のホスト変数、パラメーター・マーカー、グローバル変数、および特殊レジスターの値のセットでこのプランが作成されます。

動的 SQL における REOPT の影響

REOPT ALWAYS オプションを指定している場合、データベース・マネージャーは、OPEN ステートメントまたは EXECUTE ステートメントを検出するまで (つまり、これらの変数の値が分かるまで)、ホスト変数、パラメーター・マーカー、グローバル変数、または特殊レジスターを含むすべてのステートメントの準備を延期します。 その時点で、これらの値を使用してアクセス・プランが生成されます。 同じステートメントに対するその後の OPEN または EXECUTE 要求では、ステートメントが再コンパイルされ、 変数の現行の値のセットを使用して照会プランが再最適化され、新しく生成された照会プランが実行されます。 REOPT ALWAYS が指定されている場合、ステートメント・コンセントレーターは無効になります。

REOPT ONCE オプションにも同様の効果がありますが、 異なる点として、プランがホスト変数、パラメーター・マーカー、グローバル変数、および特殊レジスターの値で 1 回だけ最適化されます。 このプランはキャッシュされ、その後の要求で使用されます。