Seek 谓词中的标量运算符

LCJ*_*LCJ 9 sql-server execution-plan sql-server-2012

我在 SQL Server 2012 中遵循了我的实际查询的简化版本。从 Containers 表中选择数据时,它在搜索谓词中有一个标量运算符。

这个搜索谓词中标量运算符的目的是什么?

CREATE TABLE #EligibleOrders (OrderID INT PRIMARY KEY,
                             StatusCD CHAR(3),
                              CreatedOnDate DATETIME
                              )
--insert logic into #EligibleOrders

--Final Query
SELECT T2.OrderID ,olic.LineItemID,
        SUM(c.quantity) AS ShippedQty,
        COUNT(DISTINCT c.ContainerID) AS ShippedCases
FROM #EligibleOrders T2
INNER JOIN dbo.OrderLineItemContainers (NOLOCK) AS olic 
    ON  olic.OrderID = T2.OrderID
INNER JOIN dbo.Containers (NOLOCK) AS c
    ON olic.Containerid = c.Containerid
GROUP BY T2.OrderID ,olic.LineitemID 
OPTION (MAXDOP 1)
Run Code Online (Sandbox Code Playgroud)

执行计划

在此处输入图片说明

寻求谓词

在此处输入图片说明

Pau*_*ite 11

这个搜索谓词中标量运算符的目的是什么?

olic.ContainerID问题中列上的“标量运算符”仅表示列外部引用为嵌套循环(应用)的每次迭代提供单行(标量)。这纯粹是建筑性的,没有什么可担心的。

细节

在内部,查询处理器作用于树表示,它在基本级别包含关系(表值)和标量(单行)操作的组合。

当SQL Server建立showplan输出,在树中的每个运营商(即公共显示计划能)被要求出示适合输出目标(一表示SHOWPLAN_XMLSHOWPLAN_TEXTSTATISTICS XML...等等)。

XML输出格式具有符合显示计划架构,其中包含关系和标量运算符元素。模式在许多地方指定了标量运算符元素。

特定文本“标量运算符(...)”是出现在 SSMS 工具提示中、属性窗口中还是仅出现在原始 XML 中,取决于每一层的实现细节。

例如,简单的查询:

SELECT TOP (1) 1;
Run Code Online (Sandbox Code Playgroud)

...在 SSMS 工具提示中生成一个没有“标量运算符”的计划,但在属性窗口中为计算标量关系运算符提供:

计算标量标量运算符

...并且仅在 Top 关系运算符的原始 XML 中:

顶级标量运算符

出于所有实际目的,应该简单地忽略“标量运算符”文本。除了它包含的东西是标量之外,它没有任何意义。