直接执行

直接执行是最基本的语句执行方式。 应用程序生成包含 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 语句中包括数据常量;改用绑定到程序变量的参数标记。 有关详细信息,请参阅使用语句参数

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

  • 令应用程序连接尽量使用常用的一组连接和语句选项。 从具有某一组选项(如 ANSI_NULLS)的连接生成的执行计划不会重复用于具有另一组选项的连接。 SQL Server Native Client ODBC 驱动程序和 SQL Server Native Client OLE DB 访问接口的这些选项都具有相同的默认设置。

如果使用上述约定对使用 SQLExecDirect 执行的所有语句进行编码,SQL Server 将尽可能地重用执行计划。

请参阅

概念

执行语句 (ODBC)