Skalaroperator im Suchprädikat

8

Ich habe die folgende vereinfachte Version meiner eigentlichen Abfrage in SQL Server 2012. Sie hat einen skalaren Operator im Suchprädikat, wenn Daten aus der Containertabelle ausgewählt werden.

Was ist der Zweck des Skalaroperators in diesem Suchprädikat?

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)

Ausführungsplan

Geben Sie hier die Bildbeschreibung ein

Prädikat suchen

Geben Sie hier die Bildbeschreibung ein

LCJ
quelle

Antworten:

10

Was ist der Zweck des Skalaroperators in diesem Suchprädikat?

Der "Skalaroperator" in der olic.ContainerIDSpalte in der Frage gibt lediglich an, dass die äußere Referenz der Spalte eine einzelne Zeile (Skalar) pro Iteration der verschachtelten Schleife (Anwenden) bereitstellt. Es ist rein architektonisch und kein Grund zur Sorge.

Einzelheiten

Intern wirkt der Abfrageprozessor auf eine Baumdarstellung, die auf einer Basisebene eine Kombination aus relationalen (tabellenwertigen) und skalaren (einzeiligen) Operationen enthält.

Wenn SQL Server Showplan - Ausgabe erstellt, wobei jeder Operator im Baum (die zur öffentlichen Showplan aktiviert ist) wird gebeten , eine Darstellung geeignet für das Ausgabeziel zu erzeugen ( SHOWPLAN_XML, SHOWPLAN_TEXT, STATISTICS XML... und so weiter).

Das XMLAusgabeformat muss dem Showplan-Schema entsprechen , das Elemente für relationale und skalare Operatoren enthält. Das Schema gibt an vielen Stellen skalare Operatorelemente an.

Ob der spezifische Text "Scalar Operator (...)" in einem SSMS-Tooltip, im Eigenschaftenfenster oder nur im Roh-XML angezeigt wird, hängt von den Implementierungsdetails auf jeder Ebene ab.

Zum Beispiel die einfache Abfrage:

SELECT TOP (1) 1;

... erstellt einen Plan ohne "Skalaroperator" in den SSMS-Tooltips, der jedoch für den relationalen Operator "Skalar berechnen" im Eigenschaftenfenster vorhanden ist:

Skalar skalieren Operator berechnen

... und nur im unformatierten XML für den relationalen Top-Operator:

Top Skalar Operator

Für alle praktischen Zwecke sollte der Text "Skalaroperator" einfach ignoriert werden. Es bedeutet nichts anderes, als dass das, was es einschließt, ein Skalar ist.

Paul White 9
quelle
3

Was ist der Zweck des Skalaroperators in diesem Suchprädikat?

Der Skalaroperator ist "as". Es ist ein Aliasing der Spalte. Warum passiert das jetzt? Das hat ein bisschen gedauert und ich habe immer noch keine 100% konkrete Antwort gefunden. Der einzige Hinweis, den ich darauf fand, war in SQL Server Execution Plans, 2. Ausgabe. Das Buch erwähnt, dass diese Operation in einem Suchprädikat auftritt, wenn der Optimierer beschließt, die Reihenfolge eines Joins oder einer Suche zu ändern.

Anthony Genovese
quelle
2
Dies war eine gute Vermutung von Grant zu der Zeit, als er dieses Buch schrieb, aber es ist leider nicht richtig.
Paul White 9