SELECT $partition.TwoYearDateRangePFN(o.OrderDate)
AS [Partition Number]
, min(o.OrderDate) AS [Min Order Date]
, max(o.OrderDate) AS [Max Order Date]
, count(*) AS [Rows In Partition]
FROM dbo.Orders AS o
WHERE $partition.TwoYearDateRangePFN(o.OrderDate) IN (21, 22, 23)
GROUP BY $partition.TwoYearDateRangePFN(o.OrderDate)
ORDER BY [Partition Number]
GO
此时,您可以从图形上识别分区消除。可以对分区表和索引使用其他的优化方法,尤其是在它们与您要连接的表对齐的情况下。SQL Server 可以通过先连接每个分区来执行多个连接。
预先连接对齐的表
在同一个查询中,SQL Server 不仅消除分区,还分别在其余分区之间执行连接。除了查看每个表访问的执行次数之外,请注意与合并连接相关的信息。如果将光标悬停在合并连接的上方,您会发现合并连接执行了三次。
图 16:连接分区表
在图 16 中,请注意执行了额外的嵌套环连接。看上去这是在合并连接后发生的,但实际上,分区 ID 已经传递给每个表搜索或扫描操作;最后这个连接只是将两个分区数据集连接起来,确保每个数据集都符合一开始(在“Constant Scan”表达式中)定义的分区 ID。