搜索谓词中的标量运算符


8

在SQL Server 2012中,我使用了实际查询的简化版本。从“容器”表中选择数据时,它在查找谓词中具有标量运算符。

标称运算符在此查找谓词中的用途是什么?

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)

执行计划

在此处输入图片说明

寻求谓词

在此处输入图片说明

Answers:


10

标称运算符在此查找谓词中的用途是什么?

olic.ContainerID问题中列上的“标量运算符” 仅表示列外部引用在嵌套循环(应用)的每次迭代中提供单个行(标量)。它纯粹是建筑,无需担心。

细节

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

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

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

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

例如,简单的查询:

SELECT TOP (1) 1;

...生成的计划在SSMS工具提示中没有“标量运算符”,但在属性窗口中显示了Compute Scalar关系运算符:

计算标量标量运算符

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

顶级标量运算符

出于所有实际目的,仅应忽略“标量运算符”文本。它所包含的东西是一个标量,什么也没有。


3

标称运算符在此查找谓词中的用途是什么?

标量运算符为“ as”。它是列的别名。现在为什么会这样?这需要一点点挖掘,但我仍然真的没有找到100%的具体答案。我发现它的唯一参考是在Sql Server执行计划第二版中。 该书提到,当优化程序决定更改联接或查找的顺序时,就会在查找谓词中发生此操作。


2
格兰特在写那本书的时候,这是一个很好的猜测,但恐怕是不正确的。
保罗·怀特9
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.