アプリケーション開発の手引き

静的 SQL の利点

静的 SQL を用いたプログラミングは、組み込み動的 SQL を用いたプログラミングよりも簡単です。静的 SQL ステートメントはホスト言語ソース・ファイルに簡単に組み込まれ、プリコンパイラーは必要に応じて、ホスト言語コンパイラーが処理できるデータベース・マネージャー実行時サービス API 呼び出しへの変換を処理します。

アプリケーションのバインドを行うユーザーの許可が使用されているため、エンド・ユーザーはパッケージでステートメントを実行するための直接的な特権は不要です。たとえば、表全体についての更新特権がないユーザーでも、表の一部を更新できるようにすることが可能です。これを行うには、特定の列または値の範囲だけを更新できるように静的 SQL ステートメントを制限します。

静的 SQL ステートメントには持続性 があります。つまりこれは、ステートメントはパッケージが存在する限り続くという意味です。動的 SQL ステートメントは、スペース管理の理由で無効にされるか解放されるまで、またはデータベースが遮断されるまでキャッシュされます。必要であれば、動的 SQL ステートメントはキャッシュされたステートメントが無効になった時点で、 DB2 SQL コンパイラーにより暗黙に再コンパイルされます。キャッシュおよびキャッシュされたステートメントが無効となる原因については、 SQL 解説書 を参照してください。

持続性に関する静的 SQL の重要な利点は、静的ステートメントはある特定のデータベースが遮断した後でも存在するという点です。一方、動的 SQL ステートメントはデータベースが遮断すると失われてしまいます。さらに、静的 SQL は実行時に DB2 SQL コンパイラーでコンパイルする必要はありませんが、動的 SQL は実行時に明示的に (PREPARE ステートメントなどを使用して) コンパイルしなければなりません。 DB2 は動的 SQL ステートメントをキャッシュするため、動的ステートメントを頻繁に DB2 でコンパイルする必要はありませんが、アプリケーション実行時に少なくとも 1 回はコンパイルしなければなりません。

静的 SQL にはパフォーマンス上の利点もあります。簡単に言うと、SQL プログラムの実行時間が短いという点です。すなわち、ステートメントの実行可能形式を準備するオーバーヘッドは、実行時ではなくプリコンパイル時に行われるため、静的 SQL ステートメントは動的に処理された同じステートメントよりも迅速に実行されます。
注:静的 SQL のパフォーマンスは、アプリケーションが最後にバインドされた時のデータベースの統計によって決まります。一方、この統計が変化すると、対応する動的 SQL のパフォーマンスは非常に異なってくる可能性があります。たとえば、後でデータベースに索引を追加する場合、静的 SQL を用いたアプリケーションは、データベースにバインドし直さなければその索引を利用することはできません。また、静的 SQL ステートメントでホスト変数を使用する場合、最適化プログラムは表の分散統計を活用することができません。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]