次の方法で共有


直接実行

直接実行は、ステートメントを実行する最も基本的な方法です。 アプリケーションは、Transact-SQL ステートメントを含む文字列をビルドし、 SQLExecDirect 関数を使用して実行のために送信します。 ステートメントがサーバーに到達すると、SQL Server によって実行プランにコンパイルされ、すぐに実行プランが実行されます。

直接実行は、実行時にステートメントをビルドして実行するアプリケーションで一般的に使用され、1 回実行されるステートメントの最も効率的なメソッドです。 多くのデータベースの欠点は、SQL ステートメントを実行するたびに解析およびコンパイルする必要があり、ステートメントが複数回実行される場合にオーバーヘッドが増加するという点です。

SQL Server では、マルチユーザー環境で一般的に実行されるステートメントの直接実行のパフォーマンスが大幅に向上し、一般的に実行される SQL ステートメントのパラメーター マーカーと共に SQLExecDirect を使用すると、準備された実行の効率にアプローチできます。

SQL Server のインスタンスに接続されている場合、SQL Server Native Client ODBC ドライバーは、SQLExecDirect で指定された SQL ステートメントまたはバッチを送信するためにsp_executesqlを使用します。 SQL Server には、 sp_executesql で実行された SQL ステートメントまたはバッチが、メモリに既に存在する実行プランを生成したステートメントまたはバッチと一致するかどうかを迅速に判断するロジックがあります。 一致した場合、SQL Server は新しいプランをコンパイルするのではなく、既存のプランを再利用するだけです。 つまり、多くのユーザーがシステムで SQLExecDirect を使用して実行される一般的に実行される SQL ステートメントは、以前のバージョンの SQL Server のストアド プロシージャでのみ使用できるプラン再利用の利点の多くを利用できます。

実行プランを再利用するこの利点は、複数のユーザーが同じ SQL ステートメントまたはバッチを実行している場合にのみ機能します。 次のコーディング規則に従って、さまざまなクライアントによって実行される SQL ステートメントが実行プランを再利用するのに十分似ている可能性を高めます。

  • SQL ステートメントにデータ定数を含めないでください。代わりに、プログラム変数にバインドされたパラメーター マーカーを使用します。 詳細については、「 ステートメント パラメーターの使用」を参照してください。

  • 完全修飾オブジェクト名を使用します。 オブジェクト名が修飾されていない場合、実行プランは再利用されません。

  • 可能な限りアプリケーション接続を使用するには、接続オプションとステートメント オプションの共通セットを使用します。 1 つのオプションセット (ANSI_NULLS など) を持つ接続に対して生成された実行プランは、別のオプションセットを持つ接続には再利用されません。 SQL Server Native Client ODBC ドライバーと SQL Server Native Client OLE DB プロバイダーの両方に、これらのオプションに対して同じ既定の設定があります。

SQLExecDirect で実行されるすべてのステートメントがこれらの規則を使用してコーディングされている場合、SQL Server は機会が生じたときに実行プランを再利用できます。

こちらもご覧ください

ステートメントの実行 (ODBC)