Скалярный оператор в поиске предиката

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)

План выполнения

введите описание изображения здесь

Искать предикат

введите описание изображения здесь

LCJ
источник

Ответы:

10

Какова цель скалярного оператора в этом предикате поиска?

«Оператор скаляра» в olic.ContainerIDстолбце, о котором идет речь, просто указывает, что внешняя ссылка на столбец обеспечивает одну строку (скаляр) для каждой итерации вложенного цикла (применить). Это чисто архитектурно и не о чем беспокоиться.

подробности

Внутри процессор запросов действует в виде дерева, которое на базовом уровне содержит комбинацию реляционных (табличных) и скалярных (однорядных) операций.

Когда SQL Server строит вывод плана исполнения, каждый оператор в дереве (который включен для общественного плана исполнения) предлагается создать представление , подходящее для вывода цели ( SHOWPLAN_XML, SHOWPLAN_TEXT, STATISTICS XML... и так далее).

XMLФормат вывода должен соответствовать SHOWPLAN схеме , которая содержит элементы для реляционных и скалярных операторов. Схема определяет элементы скалярного оператора во многих местах.

Будет ли конкретный текст «Скалярный оператор (...)» отображаться во всплывающей подсказке SSMS, в окне «Свойства» или только в необработанном XML, зависит от деталей реализации на каждом уровне.

Например, простой запрос:

SELECT TOP (1) 1;

... создает план без «Скалярный оператор» во всплывающих подсказках SSMS, но присутствует для реляционного оператора «Вычислить скалярный» в окне свойств:

Вычислить скалярный скалярный оператор

... и только в необработанном XML для реляционного оператора Top:

Главный скалярный оператор

Для практических целей текст «Скалярный оператор» следует просто игнорировать. Это ничего не значит, кроме того, что то, что он заключает, является скаляром.

Пол Уайт 9
источник
3

Какова цель скалярного оператора в этом предикате поиска?

Скалярный оператор "как." Это псевдоним столбца. Теперь, почему это происходит? Это заняло немного времени, и я все еще не нашел 100% -ного конкретного ответа. Единственное упоминание, которое я нашел, было в Планах выполнения Sql Server, 2nd Edition. В книге упоминается, что эта операция в предикате поиска происходит, когда оптимизатор решает изменить порядок объединения или поиска.

Энтони Дженовезе
источник
2
Это было хорошее предположение Гранта в то время, когда он писал эту книгу, но я боюсь, что это неверно.
Пол Уайт 9