直接実行
適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
直接実行はステートメントを実行する最も基本的な方法です。 アプリケーションは、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 ステートメントには定数データを含めません。代わりにプログラム変数にバインドされるパラメーター マーカーを使用します。 詳細については、「ステートメント パラメーターの使用」を参照してください。
完全修飾オブジェクト名を使用します。 実行プランは、オブジェクト名が修飾されていないと再利用されません。
アプリケーション接続では、できる限り、接続オプションとステートメント オプションの共通のセットを使用します。 あるオプションのセット (ANSI_NULLS など) を使用する接続に対して生成される実行プランは、別のオプションのセットを使用する接続には再利用されません。 SQL Server Native Client ODBC ドライバーと SQL Server Native Client OLE DB プロバイダーの両方に、これらのオプションに対して同じ既定の設定があります。
SQLExecDirect で実行されるすべてのステートメントがこれらの規則を使用してコーディングされている場合、SQL Server は機会が生じたときに実行プランを再利用できます。