是每批还是每个语句的执行计划?

时间:2018-02-08 20:25:06

标签: sql-server

我一直在微软网站https://technet.microsoft.com/en-us/library/ms175502(v=sql.105).aspx上阅读这篇文章。

提到

  

批处理是一组一个或多个Transact-SQL语句,它们同时从应用程序发送到SQL Server以供执行。 SQL Server将批处理的语句编译为单个可执行单元,称为执行计划。

我认为每个查询(语句)都有自己的执行计划。 是每批还是每个语句的执行计划?

1 个答案:

答案 0 :(得分:0)

"SQL Server compiles the statements of a batch into a single executable 
unit, called an execution plan. The statements in the execution plan are 
then executed one at a time"  

SQL Server为批处理制定执行计划。每个声明都有一个查询计划,它构成了执行计划的一部分。您可以通过在单个窗口中运行多个语句并查看查询计划来演示这一点,每个查询计划都有一条标记为"相对于批处理"的信息。 混淆可能在于,如果您运行单个语句,则您的一个查询计划是整个执行计划。引用的文章OP假设读者熟悉执行计划/查询计划动态。

在问题中由OP链接的文章中的重要内容是使用批处理的规则。特别是前两个:

--If you CREATE a rule, constraint, or view in the batch, you cannot 
reference   it by another statement in the same batch.

--If you alter a table, you cannot utilize the new schema in a different 
query   in the same batch.

这意味着SQL服务器在执行批处理之前缓存批处理中所有语句的架构信息,并且在处理批处理时不会更新架构信息。

从应用程序到服务器的批处理语句的另一个(可能更重要且更常用)元素是事务的使用。如果在批处理的任何语句中发生错误,您可以使用事务来管理提交和回滚。在标题为" Batches"

的部分下面的顶部附近的链接文章中简要介绍了这一点。