Operatore scalare nel cercare predicato


8

Ho seguito la versione semplificata della mia query effettiva, in SQL Server 2012. Ha un operatore scalare in cerca predicato quando seleziona i dati dalla tabella Container.

Qual è lo scopo dell'operatore scalare in questo predicato di ricerca?

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)

Progetto esecutivo

inserisci qui la descrizione dell'immagine

Cerca Predicato

inserisci qui la descrizione dell'immagine

Risposte:


10

Qual è lo scopo dell'operatore scalare in questo predicato di ricerca?

L '"Operatore scalare" sulla olic.ContainerIDcolonna nella domanda indica semplicemente che il riferimento esterno della colonna fornisce una singola riga (scalare) per iterazione del ciclo nidificato (applica). È puramente architettonico e nulla di cui preoccuparsi.

Dettagli

Internamente, il Query Processor agisce su una rappresentazione ad albero, che a livello base contiene una combinazione di operazioni relazionali (valutate a livello di tabella) e scalari (a riga singola).

Quando SQL Server si basa uscita showplan, ogni operatore nella struttura (che è abilitato per Showplan pubblico) viene chiesto di produrre una rappresentazione adatta per il target di produzione ( SHOWPLAN_XML, SHOWPLAN_TEXT, STATISTICS XML... e così via).

Il XMLformato di output deve essere conforme allo schema showplan , che contiene elementi per operatori sia relazionali che scalari. Lo schema specifica gli elementi dell'operatore scalare in molti punti.

Se il testo specifico "Operatore scalare (...)" viene visualizzato in una descrizione comandi SSMS, nella finestra Proprietà o solo nell'XML non elaborato dipende dai dettagli di implementazione su ciascun livello.

Ad esempio, la query semplice:

SELECT TOP (1) 1;

... produce un piano senza "Operatore scalare" nelle descrizioni dei comandi SSMS, ma presente per l'operatore relazionale scalare di calcolo nella finestra delle proprietà:

Calcola operatore scalare scalare

... e solo nel codice XML non elaborato per l'operatore relazionale principale:

Operatore scalare superiore

Per tutti gli scopi pratici, il testo "Operatore scalare" dovrebbe essere semplicemente ignorato. Non significa altro che la cosa che racchiude è uno scalare.


3

Qual è lo scopo dell'operatore scalare in questo predicato di ricerca?

L'operatore scalare è "come". Sta aliasando la colonna. Ora, perché sta succedendo questo? Ci è voluto un po 'di ricerche e non ho ancora trovato una risposta concreta al 100%. L'unico riferimento che ho trovato era in Sql Server Execution Plans, 2nd Edition. Il libro menziona che questa operazione in un predicato di ricerca si verifica quando l'ottimizzatore decide di cambiare l'ordine di un join o di una ricerca.


2
Questa era una buona ipotesi di Grant al momento in cui scrisse quel libro, ma non è corretto, temo.
Paul White 9
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.