解释已分区对象的执行计划

新建日期: 2005 年 12 月 5 日

涉及已分区数据库表、索引以及索引视图的查询执行计划通常包含表示分区之间联接的 Nested Loops 运算符,其中 Constant Scan 运算符位于外侧,已分区对象的扫描或查找位于内侧。

在已分区对象的执行计划中,Nested Loops 联接会从内侧读取一个或多个表分区或索引分区。Constant Scan 运算符的 Values 属性中包含的数字表示分区号。注明分区号会确认查询优化器正在执行分区消除。

分区消除在编译和运行时都会发生。编译时发生的消除可以在 SET 选项 SHOWPLAN_ALL 或 SHOWPLAN_XML 生成的执行计划中查看,也可以通过在 SQL Server Management Studio 中单击**“显示估计的执行计划”进行查看。运行时发生的消除可以在 SET 选项 STATISTICS PROFILE 或 STATISTICS XML 生成的执行计划中查看,也可以通过在 Management Studio 中单击“包括实际的执行计划”**进行查看。

为已分区表或索引生成并行计划时,Constant ScanNested Loops 联接运算符之间会出现 Parallelism 运算符。在此情况下,在联接外侧的多个线程会各自在不同的分区上进行读取和操作。线程数可能与分区数不同。如果线程数和分区数相同,则每个线程恰好处理一个分区。如果线程数多于分区数,则在处理分区时,超出的线程处于空闲状态。如果线程数少于分区数,则线程将开始操作,并且无论哪个线程首先完成,都会处理下一个分区。在任何时候,都是一个线程处理一个分区。一个分区不会供多个线程共享,但是多个分区可以并行处理。

示例

下面的查询访问 AdventureWorks 示例数据库的已分区 Production.TransactionHistoryArchive 表的两个分区。为此查询生成显示计划时,将生成 Nested Loops 联接运算符,显示何时联接这两个表分区以满足查询。Nested Loops 联接运算符之后紧跟着 Constant Scan 运算符。为满足此查询而联接的两个分区将在为 Constant Scan 运算符列出的 Values 属性中标识。

ms345599.note(zh-cn,SQL.90).gif注意:
若要重新生成此示例,必须首先对 AdventureWorks 示例数据库运行 PartitionAW.sql 脚本。有关详细信息,请参阅 Readme_PartitioningScript
USE AdventureWorks;
GO
-- The following SET statement option produces an XML Showplan.
-- To produce a graphical execution plan, click the Include Actual
-- Execution Plan icon in the Management Studio toolbar.
SET STATISTICS XML ON;
GO
SELECT ProductID, Quantity, TransactionDate
FROM Production.TransactionHistoryArchive
WHERE TransactionDate <= '12/02/2003'
ORDER BY ProductID;
GO

如果在 Management Studio 中生成图形执行计划,则将您的鼠标移到 Constant Scan 运算符图标上方,或者右键单击 Constant Scan 运算符图标并选择**“属性”**。在“属性”窗格中,Values 属性列出 ((1))、((2))。这些数字对应于查询中所涉及的分区。

如果生成 XML 显示计划,则在 NestedLoops 元素下查找一个 ConstantScan 元素。将为 ConstantScan 下的 Values 子元素列出分区号,如下所示:

<ConstantScan>

     <Values>

          <Row>

               <ScalarOperator ScalarString="(1)">

                    <Const ConstValue="(1)" />

               </ScalarOperator>

          </Row>

          <Row>

               <ScalarOperator ScalarString="(2)">

                    <Const ConstValue="(2)" />

               </ScalarOperator>

          </Row>

     </Values>

</ConstantScan>

请参阅

参考

Nested Loops Showplan 运算符
Constant Scan Showplan 运算符
Parallelism Showplan 运算符
显示图形执行计划 (SQL Server Management Studio)

概念

已分区表和已分区索引
通过使用 Showplan SET 选项显示执行计划 (Transact-SQL)

帮助和信息

获取 SQL Server 2005 帮助