直接执行

直接执行是执行语句的最基本方法。 应用程序生成包含 Transact-SQL 语句的字符串,并使用 SQLExecDirect 函数提交该字符串以供执行。 当语句到达服务器时,SQL Server 将其编译为执行计划,然后立即运行执行计划。

直接执行通常由在运行时生成和执行语句的应用程序使用,并且是一次性执行的语句最有效的方法。 它有许多数据库的缺点是每次执行 SQL 语句时都必须对其进行分析和编译,这会增加多次执行该语句时的开销。

SQL Server 显著提高了在多用户环境中直接执行常用语句的性能,将 SQLExecDirect 与常见执行的 SQL 语句的参数标记结合使用可以接近准备的执行效率。

连接到 SQL Server 实例时,SQL Server Native Client ODBC 驱动程序使用 sp_executesql 来传输 SQLExecDirect 上指定的 SQL 语句或批处理。 SQL Server 具有逻辑来快速确定使用 sp_executesql 执行的 SQL 语句或批处理是否与生成内存中已存在的执行计划的语句或批处理匹配。 如果进行了匹配,SQL Server 只需重复使用现有计划,而不是编译新计划。 这意味着,在系统中使用 SQLExecDirect 执行的常见 SQL 语句,许多用户将受益于许多计划重用权益,这些优势仅适用于早期版本的 SQL Server 中的存储过程。

仅当多个用户执行同一 SQL 语句或批处理时,重用执行计划的好处才有效。 遵循以下编码约定,提高不同客户端执行的 SQL 语句足以重用执行计划的概率:

  • 不要在 SQL 语句中包含数据常量;而是使用绑定到程序变量的参数标记。 有关详细信息,请参阅 Using 语句参数

  • 使用完全限定的对象名称。 如果对象名称不限定,则不会重复使用执行计划。

  • 让应用程序连接尽可能使用一组常见的连接和语句选项。 对于具有另一组选项的连接(如ANSI_NULLS)的连接生成的执行计划不会重复使用。 SQL Server Native Client ODBC 驱动程序和 SQL Server Native Client OLE DB 提供程序都对这些选项具有相同的默认设置。

如果使用 SQLExecDirect 执行的所有语句都使用这些约定进行编码,则当出现机会时,SQL Server 可以重复使用执行计划。

另请参阅

执行语句 (ODBC)