Guida di riferimento per operatori showplan fisici e logici

Si applica a:SQL Serverdatabase SQL di AzureIstanza gestita di Azure SQLDatabase SQL in Microsoft Fabric

Gli operatori descrivono come il Motore di database di SQL Server esegue una query. Query Optimizer usa gli operatori per compilare un piano di query per creare il risultato o eseguire l'operazione specificata nella query. Il piano di query è un albero composto da operatori fisici L'operatore più a sinistra è la radice, che determina l'esecuzione complessiva. Per un'istruzione SELECT , la radice restituisce in genere un set di risultati al client. Per le istruzioni di modifica dei dati (INSERT, UPDATE, DELETE, MERGE) o istruzioni come SELECT...INTO, la radice determina la modifica e potrebbe non restituire righe. Gli operatori senza input, all'estrema destra dell'albero, sono nodi foglia che in genere leggono i dati dalla memoria. Gli operatori intermedi trasformano, filtrano o aggiungono i dati man mano che passano da destra a sinistra attraverso il piano.

È possibile visualizzare il piano di query utilizzando le istruzioni SET SHOWPLAN, le opzioni di piano di esecuzione grafico in SQL Server Management Studio o gli eventi showplan degli eventi estesi.

Tipi di operatore

Gli operatori sono suddivisi in operatori logici e fisici.

Operatori logici

Gli operatori logici descrivono l'operazione algebrica relazionale usata per elaborare una query. In altre parole, gli operatori logici descrivono a livello concettuale quale operazione deve essere eseguita.

Operatori fisici

Gli operatori fisici implementano l'operazione descritta dagli operatori logici. Ogni operatore fisico è un oggetto o una routine che esegue un'operazione. Alcuni operatori fisici, ad esempio, accedono alle colonne o alle righe di una tabella, di un indice o di una vista, Altri operatori fisici eseguono operazioni come calcoli, aggregazioni, controlli di integrità dei dati o join. Gli operatori fisici hanno costi associati.

Dopo essere stati inizializzati, gli operatori fisici raccolgono dati e quindi vengono chiusi. Un operatore fisico risponde alle tre chiamate di metodo seguenti:

  • Open(): con il metodo Open(), un operatore fisico inizializza se stesso e configura le strutture dei dati necessarie. Anche se l'operatore fisico potrebbe ricevere molte chiamate Open(), generlamente ne riceve solo una.

  • GetRow(): con il metodo GetRow(), un operatore fisico ottiene la prima riga di dati o la successiva. L'operatore fisico potrebbe ricevere zero o numerose chiamate GetRow().

  • Close(): Il metodo Close() fa sì che un operatore fisico esegua alcune operazioni di pulizia e si arresti. Un operatore fisico riceve una sola chiamata Close(), ma una chiamata Close() non è sempre garantita.

Il metodo GetRow() restituisce una riga di dati e il numero di volte in cui viene chiamato viene indicato come ActualRows nell'output prodotto dal piano di esecuzione grafico e XML. Per altre informazioni su queste SET opzioni, vedere SET STATISTICS PROFILE e SET STATISTICS XML.

Elementi del linguaggio

Alcuni operatori in un piano di query rappresentano elementi Transact-SQL language anziché operazioni relazionali. Tra questi sono inclusi costrutti come l'assegnazione di variabili, la conversione dei tipi e il flusso di controllo (IF/WHILE). Gli elementi del linguaggio non vengono classificati come operatori logici o fisici.

Ribind, riavvolgimenti, e fasi finali di scansione

I seguenti contatori appaiono nell'output di showplan e aiutano a capire quanto spesso un operatore viene eseguito di nuovo.

I conteggi ActualRebinds e ActualRewinds visualizzati nell'output dello showplan fanno riferimento al numero di volte che il metodo Open() è stato chiamato. A meno che un operatore non sia nel lato interno di un join a cicli annidati, ActualRebinds è uguale a uno e ActualRewinds è uguale a zero. Se un operatore si trova nel lato interno di un loop join, il numero totale dei rebind e dei rewind deve essere uguale al numero di righe elaborate nel lato esterno del join. Una riassociazione significa che uno o più parametri correlati del join sono stati modificati e che è necessario rivalutare il lato interno. Un rewind implica che nessuno dei parametri correlati è stato modificato e che è possibile usare nuovamente il set di risultati interno precedente.

ActualRebinds e ActualRewinds sono presenti nell'output del piano di esecuzione XML prodotto utilizzando SET STATISTICS XML ON e il piano di esecuzione grafico. Vengono popolati per operatori come Index Spool, Remote Query, Row Count Spool, Sort, Table Spool e Table-valued Function. ActualRebinds e ActualRewinds possono anche essere popolati per operatori come Assert e Filter quando l'attributo StartupExpression è impostato su TRUE.

Quando ActualRebinds e ActualRewinds sono presenti in uno Showplan XML, sono confrontabili con EstimateRebinds ed EstimateRewinds. Quando non sono presenti, il numero stimato di righe (EstimateRows) è confrontabile con il numero effettivo di righe (ActualRows). Nell'output dello showplan grafico attuale vengono visualizzati zeri per i rebind e i rewind attuali quando sono assenti.

Un contatore correlato, ActualEndOfScans, è disponibile nello showplan XML e grafico. Ogni volta che un operatore fisico raggiunge la fine del proprio flusso di dati, il contatore viene incrementato di uno. Un operatore fisico può raggiungere la fine del proprio flusso di dati, zero, una o più volte. Come per i "rebind" e "rewind", il conteggio di fine della scansione può essere maggiore di uno solo se l’operatore si trova nel lato interno di un join ad anello. Il conteggio delle scansioni deve essere minore o uguale alla somma del numero di rilegature e riavvolgimenti.

Modalità di mapping degli operatori logici e fisici di Query Optimizer

Query Optimizer crea un piano di query che consiste in un albero di operatori logici. Dopo aver creato il piano, Query Optimizer sceglie un operatore fisico per ogni operatore logico. Query Optimizer usa un approccio basato sui costi per determinare quale operatore fisico implementa un operatore logico.

In genere un'operazione logica può essere implementata da più operatori fisici. In alcuni casi rari tuttavia anche un operatore fisico può implementare più operazioni logiche.

Esecuzione in modalità batch

L'esecuzione in modalità batch è un metodo di elaborazione delle query usato per l’elaborazione di più righe insieme (da cui il termine batch) invece di una riga alla volta. L'elaborazione in modalità batch usa algoritmi ottimizzati per CPU multicore e una maggiore produttività della memoria sull'hardware moderno. La modalità batch può essere usata da un insieme di operatori per oggetti rowstore e columnstore. Per altre informazioni, vedere Guida all'architettura di elaborazione delle query.

Come leggere un piano di esecuzione

Nel piano di esecuzione grafico le frecce puntano da destra a sinistra, che rappresentano il flusso di dati. In fase di esecuzione, questo funziona nella direzione opposta: gli operatori sono basati sul pull e funzionano solo quando vengono richiesti dati.

L'operatore radice chiama GetRow() sul suo figlio, il quale chiama i propri figli, fino a quando un nodo foglia legge una riga dalla memoria e la restituisce lungo la catena gerarchica. Un'analisi dell'indice cluster con un operatore Top, ad esempio, non analizza l'intera tabella. L'analisi si arresta non appena Top contiene righe sufficienti. In modalità batch ogni chiamata restituisce un batch di righe anziché una singola riga. Entrambe le direzioni di lettura sono utili: da destra a sinistra vengono visualizzati i dati immessi in ogni operatore, mentre da sinistra a destra viene mostrato quale operatore guida il lavoro.

Descrizioni dell'operatore

In questa sezione vengono descritti gli operatori fisici e logici. È possibile visualizzare le proprietà dei piani di query e degli operatori usando il riquadro Proprietà nella visualizzazione Piano di query di SQL Server Management Studio (SSMS).

Suggerimento

Ogni volta che un'icona del piano di esecuzione grafico ha un cerchio giallo con due frecce da sinistra a destra, significa che l'operatore è stato eseguito in parallelo. Per altre informazioni sul parallelismo, vedere Guida sull'architettura dei thread e delle attività.

Icona Operatore Showplan Descrizione
Join adattivo L'operatore Adaptive Join consente di rimandare la scelta tra l'esecuzione di un metodo hash join e l'esecuzione di un metodo join a cicli annidati a dopo che è stata eseguita l'analisi del primo input.

Adaptive Join è un operatore fisico. Per altre informazioni, vedere Informazioni sui join adattivi.
Aggregato L'operatore Aggregate calcola le espressioni contenenti una o più funzioni di aggregazione.

Aggregate è un operatore logico. Può essere implementato dall'operatore Stream Aggregate, Hash Match, Window Aggregate o UserDefinedAggregate (CLR).
Espressione aritmetica L'operatore Arithmetic Expression calcola un nuovo valore da valori esistenti in una riga. Arithmetic Expression non è usato nelle versioni più recenti di SQL Server.
Assert L'operatore Assert verifica una condizione. Ad esempio, convalida l'integrità referenziale o si accerta che una sottoquery scalare restituisca una sola riga. Per ogni riga di input, l'operatore Assert valuta l'espressione nel riquadro Proprietà del piano di esecuzione. Se questa espressione restituisce NULL, la riga viene passata tramite l’operatore Assert e l’esecuzione della query prosegue. Se questa espressione restituisce un valore non NULL, verrà generato l'errore appropriato.

Assert è un operatore fisico.
Assegna L'operatore Assign assegna il valore di un'espressione o di una costante a una variabile.

Assign è un elemento di linguaggio.
None. Async Concat L'operatore Async Concat viene usato solo nelle query remote (query distribuite). È caratterizzato da n nodi figlio e un nodo padre. Alcuni nodi figli sono solitamente computer remoti che partecipano a una query distribuita. Async Concat invia chiamate Open() simultanee a tutti i figli e quindi applica una mappa di bit a ogni figlio. Per ogni bit che corrisponde 1, Async Concat invia le righe di output al nodo padre su richiesta.

Async Concat è un operatore fisico.
Compilazione tabella hash batch L'operatore Batch Hash Table Build compila una tabella hash batch per un indice columnstore ottimizzato per la memoria.

Applica solo a: SQL Server 2012 (11,x).
Bitmap SQL Server usa l'operatore Bitmap per implementare l'applicazione di filtri bitmap in piani di query paralleli. Il filtro bitmap accelera l'elaborazione delle query eliminando le righe con valori chiave che non possono produrre record join prima di passare righe tramite un altro operatore, ad esempio l'operatore Parallelism . Un filtro bitmap utilizza una rappresentazione compatta di un set di valori da una tabella in una parte dell'albero dell'operatore per filtrare le righe da una seconda tabella in un'altra parte dell'albero. Rimuovendo le righe non necessarie quanto prima nella query, gli operatori successivi hanno meno righe su cui lavorare e le prestazioni complessive della query migliorano. L'ottimizzatore determina quando un bitmap è sufficientemente selettivo per essere utile e su quali operatori applicare il filtro.

Bitmap è un operatore fisico.
Bitmap Create L'operatore Bitmap Create è visualizzato nell'output dello showplan in cui vengono generate le bitmap.

Bitmap Create è un operatore logico.
None. Repartizione di rami In un piano di query parallelo a volte sono presenti regioni concettuali di iteratori. Tutti gli iteratori all'interno di tale area possono essere eseguiti su thread paralleli. Le aree stesse devono essere eseguite in modo seriale. Alcuni iteratori Parallelism all'interno di una singola regione sono denominati Branch Repartition. L'operatore Parallelism al confine tra due regioni di questo tipo viene denominato Segment Repartition.

Branch Repartition e Segment Repartition sono operatori logici.
Broadcast Broadcast ha un nodo figlio e n nodi padre. Broadcast invia le proprie righe di input a più consumatori su richiesta. Ogni consumer riceve tutte le righe. Ad esempio, se tutti i consumer sono lati build di un hash join, verranno generate n copie delle tabelle hash.

Broadcast è un operatore logico.
Eliminazione dell'indice cluster L'operatore Clustered Index Delete elimina le righe dall'indice cluster specificato nella proprietà Object elencata nel riquadro Proprietà degli showplan XML e grafici. Se è presente seekPredicate o Predicate, vengono eliminate solo le righe che soddisfano il predicato.

Nota: La proprietà Object potrebbe elencare altri indici non cluster che l'operatore modifica contemporaneamente all'indice cluster.

Clustered Index Delete è un operatore fisico.
Inserimento indice cluster L'operatore Clustered Index Insert inserisce righe dall'indice cluster specificato nella proprietà Object elencata nel riquadro Proprietà degli showplan XML e grafici. Lo showplan XML include le proprietà SetPredicate e ColumnReference, che possono essere uesate per determinare il valore su cui è impostata ogni colonna. Se in Clustered Index Insert non ci sono figli per i valori da inserire, la riga inserita viene presa dall'operatore Insert stesso.

Nota: La proprietà Object potrebbe elencare altri indici non cluster che l'operatore modifica contemporaneamente all'indice cluster.

Clustered Index Insert è un operatore fisico.
Unione di indici cluster L'operatore Clustered Index Merge applica un flusso di dati di unione a un indice cluster. L'operatore elimina, aggiorna o inserisce righe dall'indice cluster specificato nella proprietà Object elencata nel riquadro Proprietà degli showplan XML e grafici. L'operazione effettiva eseguita dipende dal valore di runtime della proprietà ActionColumn.

Nota: La proprietà Object potrebbe elencare altri indici non cluster che l'operatore modifica contemporaneamente all'indice cluster.

Clustered Index Merge è un operatore fisico.
Analisi indice cluster L'operatore Clustered Index Scan esegue la scansione dell'indice cluster specificato nella proprietà Object elencata nel riquadro Proprietà degli showplan XML e grafici. Quando è presente un Predicate opzionale, vengono restituite solo le righe che soddisfano il predicato. Se la proprietà Ordered nel riquadro Proprietà o nello showplan XML è True, Query Processor ha determinato che le righe devono essere restituite nell'ordine in cui sono state ordinate dall'indice cluster. Se la proprietà Ordered è False, il motore di database analizza l'indice senza garantire l'ordine dell'output. La proprietà SeekPredicate è disponibile solo per un indice cluster partizionato.

Clustered Index Scan è un operatore logico e fisico.
Clustered Index Seek L'operatore Clustered Index Seek utilizza le funzionalità di ricerca degli indici per recuperare righe da un indice cluster. La proprietà Object, elencata nel riquadro Proprietà degli showplan XML e grafici, contiene il nome dell'indice cluster usato. SeekPredicate contiene il predicato per la ricerca. Il motore di database usa l'indice per elaborare solo le righe che soddisfano SeekPredicate. Può includere anche una proprietà Predicate con cui il motore di database valuta tutte le righe che soddisfano SeekPredicate, ma è facoltativo e non usa indici per completare questo processo. La proprietà Ordered è in genere True per questo operatore.

Clustered Index Seek è un operatore logico e fisico.
Aggiornamento dell'indice cluster L'operatore Clustered Index Update aggiorna le righe di input nell'indice cluster specificato nella proprietà Object, elencata nel riquadro Proprietà degli showplan grafici e XML. Se la proprietà Predicate è presente, vengono aggiornate solo le righe che soddisfano questo predicato. Se è presente la proprietà SetPredicate, ogni colonna aggiornata viene impostata su tale valore. Se è presente la proprietà DefineValue, vengono elencati i valori definiti da tale operatore. Un riferimento a tali valori può essere presente nella clausola SET o altrove nell'operatore o nella query.

Nota: La proprietà Object potrebbe elencare altri indici non cluster che l'operatore modifica contemporaneamente all'indice cluster.

Clustered Index Update è un operatore logico e fisico.
Comprimi L'operatore Collapse ottimizza l'elaborazione degli aggiornamenti. Quando viene eseguito un aggiornamento, è possibile suddividerlo in un'operazione di eliminazione e un'operazione di inserimento tramite l'operatore Split. Il riquadro Proprietà contiene un predicato group by che specifica un elenco di colonne chiave. Se il processore delle query rileva righe adiacenti che eliminano e inseriscono gli stessi valori chiave, queste operazioni separate vengono sostituite con una singola operazione di aggiornamento più efficiente.

Collapse è un operatore logico e fisico.
Eliminazione dell'indice columnstore L'operatore Columnstore Index Delete rappresenta l’eliminazione di righe dall'indice columnstore specificato nella proprietà Object, elencata nel riquadro Proprietà degli showplan grafici e XML. L'eliminazione avviene tramite Clustered Index Delete per un indice columnstore cluster e tramite l'operatore Index Delete per un indice columnstore non cluster. Il tipo di indice (Clustered, NonClustered, ViewClustered o ViewNonClustered) viene specificato nella proprietà IndexKind nello showplan XML. SeekPredicate non è supportato per l'eliminazione di un indice columnstore. Le righe da eliminare vengono lette da un operatore figlio.

Columnstore Index Delete è un operatore fisico.
Inserimento di indice Columnstore L'operatore Columnstore Index Insert rappresenta l’inserimento di righe dal relativo input nell’indice columnstore specificato nella proprietà Object, elencata nel riquadro delle Proprietà degli showplan grafici e XML. L'inserimento avviene tramite Clustered Index Insert per un indice columnstore cluster e tramite l'operatore Index Insert per un indice columnstore non cluster. Il tipo di indice (Clustered, NonClustered, ViewClustered o ViewNonClustered) viene specificato nella proprietà IndexKind nello showplan XML. Lo showplan XML include le proprietà SetPredicate e ColumnReference, che possono essere uesate per determinare il valore su cui è impostata ogni colonna.

Columnstore Index Insert è un operatore fisico.
Merge Columnstore Index Columnstore Index Merge rappresenta l'applicazione di un flusso di dati di unione usando l'operatore Clustered Index Merge. L'operatore elimina, aggiorna o inserisce righe dall'indice columnstore cluster specificato nella proprietà Object elencata nel riquadro Proprietà degli showplan XML e grafici. Il tipo di indice (Clustered, NonClustered, ViewClustered o ViewNonClustered) viene specificato nella proprietà IndexKind nello showplan XML. L'operazione effettiva eseguita dipende dal valore di runtime della proprietà ActionColumn.

Columnstore Index Insert è un operatore fisico.
Scansione Indice Columnstore L'operatore Columnstore Index Scan rappresenta una scansione dell'indice columnstore specificato nella proprietà Object elencata nel pannello Proprietà degli showplan XML e grafici. L’analisi avviene tramite Clustered Index Scan per un indice columnstore cluster e tramite l'operatore Index Scan per un indice columnstore non cluster. Il tipo di indice (Clustered, NonClustered, ViewClustered o ViewNonClustered) viene specificato nella proprietà IndexKind nello showplan XML. Quando è presente un Predicate opzionale, vengono restituite solo le righe che soddisfano il predicato. La proprietà SeekPredicate è disponibile solo per un indice columnstore partizionato e solo per condizioni di uguaglianza o disuguaglianza. Se la colonna partizionata si trova nel predicato di query, l'eliminazione delle partizioni e l'eliminazione del rowgroup possono ridurre il numero di rowgroup da analizzare.

Columnstore Index Scan è un operatore fisico.
Aggiornamento dell'Indice Columnstore L'operatore Columnstore Index Update rappresenta un aggiornamento di una o più righe nell’indice columnstore specificato nella proprietà Object elencate nel riquadro Proprietà degli showplan XML e grafici. Gli aggiornamenti avvengono tramite l’operatore Clustered Index Update per un indice columnstore cluster e tramite l'operatore Index Update per un indice columnstore non cluster. Il tipo di indice (Clustered, NonClustered, ViewClustered o ViewNonClustered) viene specificato nella proprietà IndexKind nello showplan XML. SeekPredicate non è supportato per un aggiornamento dell'indice Columnstore. Le righe da aggiornare vengono lette da un sotto-operatore. Se è presente la proprietà SetPredicate, ogni colonna aggiornata viene impostata su tale valore. Se è presente la proprietà DefineValue, vengono elencati i valori definiti da tale operatore. Un riferimento a tali valori può essere presente nella clausola SET o altrove nell'operatore o nella query.

Columnstore Index Update è un operatore fisico.
Calcolo scalare L'operatore Compute Scalar valuta un'espressione per produrre un valore scalare calcolato. Tale valore può essere restituito all'utente e/o usato come riferimento in altre parti della query. Un esempio di entrambi è in un predicato di filtro o un predicato di join.

Gli operatori Compute Scalar visualizzati negli showplan generati da SET STATISTICS XML potrebbero non contenere l’elemento RunTimeInformation. Negli showplan grafici, Actual Rows, Actual Rebinds e Actual Rewinds potrebbero essere assenti dalla finestra Proprietà quando è selezionata l’opzione Includi piano di esecuzione effettivo in SQL Server Management Studio. In tal caso, anche se questi operatori sono stati usati nel piano di query compilato, la loro funzione è stata svolta da altri operatori nel piano di query di runtime. Il numero di esecuzioni nell'output dello showplan generato da SET STATISTICS PROFILE equivale alla somma dei rebind e dei rewinds negli showplan generati da SET STATISTICS XML.

Compute Scalar è un operatore logico e fisico.
Concatenazione L'operatore Concatenation analizza più input e restituisce ogni riga analizzata. Concatenation generalmente viene usato per implementare il costrutto UNION ALL Transact-SQL. L'operatore fisico Concatenation include almeno due input e un solo output. Concatenation copia le righe dal primo flusso di input nel flusso di output, quindi ripete l'operazione per ogni flusso di input aggiuntivo.

Concatenation è un operatore logico e fisico.
Condizionale (Se e Mentre) L’operatore Conditional esegue un'elaborazione condizionale basata su un loop IF o WHILE. If e While sono elementi del linguaggio.
Analisi costante L'operatore Constant Scan inserisce una o più righe di costanti in una query. Un operatore Compute Scalar spesso viene usato dopo Constant Scan per aggiungere colonne a una riga prodotta dall’operatore Constant Scan. Constant Scan può generare una o più righe con zero o più colonne.

Constant Scan è un operatore fisico.
Convert L'operatore Convert converte un tipo di dati scalare in un altro.

Convert è un elemento del linguaggio.
Cross Join L'operatore Cross Join unisce ogni riga del primo input (superiore) con ogni riga del secondo input (inferiore).

Cross Join è un operatore logico.
Cursor Gli operatori logici e fisici Cursor consentono di descrivere le modalità di esecuzione di una query o di un aggiornamento che implicano operazioni con i cursori. Gli operatori fisici descrivono l'algoritmo di implementazione fisica usato per l'elaborazione del cursore, ad esempio l'uso di un cursore gestito da keyset. Ogni passaggio durante l'esecuzione di un cursore comporta un operatore fisico. Gli operatori logici descrivono una proprietà del cursore, ad esempio la proprietà di sola lettura.

Gli operatori logici sono Asynchronous, Optimistic, Primary, Read Only, Scroll Locks, Secondary e Synchronous.

Gli operatori fisici sono Dynamic, Fetch Query, Keyset, Population Query, Refresh Query e Snapshot.
Declare L'operatore Declare alloca una variabile locale nel piano di query.

Declare è un elemento del linguaggio.
Delete L'operatore Delete elimina righe da un oggetto che soddisfano il predicato facoltativo nel riquadro Proprietà.

Delete è un operatore logico.
Scansione eliminata Nei trigger, l’operatore Deleted Scan esegue la scansione della tabella deleted.

Deleted Scan è un operatore logico e fisico.
None. Distinct L'operatore Distinct rimuove i duplicati da un set di righe o da una raccolta di valori.

Distinct è un operatore logico.
None. Ordinamento distinto L'operatore logico Distinct Sort analizza l’input rimuovendo i duplicati ed eseguendo l’ordinamento in base alle colonne specificate nel predicato distinct order by del riquadro Proprietà.

Distinct Sort è un operatore logico.
Distribuisci flussi L'operatore Distribute Streams viene usato esclusivamente in piani di query paralleli. L'operatore Distribute Streams elabora un singolo flusso di input di record e produce più flussi di output. Il contenuto e il formato del record non vengono modificati. Ogni record del flusso di input viene visualizzato in uno dei flussi di output, a meno che il tipo di partizionamento non sia Broadcast, nel qual caso ogni riga di input viene visualizzata in tutti i flussi di output. L'operatore mantiene automaticamente l'ordine relativo dei record di input nei flussi di output. In genere, l’hashing viene usato per stabilire a quale flusso di output appartiene un record di input.

Se l'output è partizionato, il riquadro Proprietà contiene un predicato partition columns e le colonne di partizionamento.

Distribute Streams è un operatore logico.
Dynamic L'operatore Dynamic usa un cursore che può visualizzare tutte le modifiche apportate da altri.

Dynamic è un operatore fisico.
Eager Spool L'operatore Eager Spool acquisisce l'intero input archiviando ogni riga in un oggetto temporaneo nascosto archiviato nel database tempdb. Se l'operatore viene riavvolto, ad esempio tramite un operatore Nested Loops, ma non è necessario il rebinding, vengono usati i dati di spooling invece di eseguire una nuova analisi dell’input. Se è necessario eseguire nuovamente il rebind, i dati di spooling vengono eliminati e l'oggetto di spooling viene rigenerato tramite una nuova analisi dell'input (di cui è stato eseguito il rebind). L'operatore Eager Spool genera un file di spooling in modo "eager": quando l'operatore padre richiede la prima riga, l'operatore di spooling consuma tutte le righe dall'operatore di input e le memorizza nello spool.

Eager Spool è un operatore logico.
Recupera query L'operatore Fetch Query richiama le righe quando viene emesso un recupero per un cursore.

Fetch Query è un operatore fisico.
Filter L'operatore Filter analizza l'input restituendo solo le righe che soddisfano l'espressione di filtro (predicato) che appare nel riquadro Proprietà.
None. Flusso Distinto L'operatore Flow Distinct analizza l'input rimuovendo valori duplicati. Mentre l'operatore Distinct usa l'intero input prima di produrre un output, l'operatore Flow Distinct restituisce ogni riga come viene ottenuta dall'input, tranne le righe duplicate che vengono eliminate.

Flow Distinct è un operatore logico.
Controllo dei riferimenti a chiavi esterne L'operatore Foreign Key References Check esegue controlli di integrità referenziale in-place, confrontando la riga modificata con le righe delle tabelle di riferimento per accertarsi che la modifica non comprometta l'integrità referenziale. L'operatore Foreign Key References Check viene usato quando esistono più di 253 riferimenti di chiave esterna sulla stessa chiave primaria o univoca.

Foreign Key References Check è un operatore logico e fisico.
Full Outer Join (collegamento esterno completo) L'operatore logico Full Outer Join restituisce ogni riga che soddisfa il predicato di join del primo input (superiore) con ogni riga del secondo input (inferiore). Restituisce, inoltre, righe dalle tabelle:

- Il primo input che non aveva corrispondenze nel secondo input.

- Il secondo input che non ha corrispondenze nel primo input.

L'input che non contiene valori corrispondenti viene restituito come valore Null.

Full Outer Join è un operatore logico.
Raccogliere flussi L'operatore logico Gather Streams viene usato esclusivamente in piani di query paralleli. L’operatore Gather Streams combina vari flussi di input e genera un singolo flusso di output di record unendo i flussi di input. Il contenuto e il formato del record non vengono modificati. Se l'operatore mantiene l'ordinamento, tutti i flussi di input devono essere ordinati. Se l’output è ordinato, il riquadro Proprietà contiene un predicato order by e i nomi delle colonne ordinate.

Gather Streams è un operatore logico.
Corrispondenza hash L'operatore Hash Match compila una tabella hash calcolando un valore hash per ogni riga dall'input generato. Un predicato hash, con un elenco di colonne usate per creare un valore hash, viene visualizzato nel riquadro Proprietà. A questo punto, per ogni riga probe, quando applicabile, viene calcolato un valore hash, tramite la stessa funzione hash, e vengono cercate corrispondenze nella tabella hash. Se è presente un predicato residuo (visualizzato come Residuo di compilazione o Residuo del probe nel riquadro Proprietà), anche quel predicato deve essere soddisfatto affinché le righe possano essere considerate corrispondenti. Il comportamento dipende dell'operazione logica eseguita:

- Per tutti i join, usare il primo input (superiore) per la costruzione della tabella hash e il secondo input (inferiore) per sondare la tabella hash. Le corrispondenze (o le mancate corrispondenze) dell'output dipendono dal tipo di join. Se più join usano la stessa colonna di join, le operazioni sono raggruppate in un team di hash.

- Per gli operatori Distinct o Aggregate, usare l'input per generare la tabella hash, rimuovendo i duplicati e calcolando eventuali espressioni di aggregazione. Quando viene creata la tabella hash, esaminare la tabella e generare in output tutte le voci.

Per l'operatore Union, usare il primo input per generare la tabella hash rimuovendo i duplicati. Usare il secondo input (che non deve includere duplicati) per sondare la tabella hash, restituendo tutte le righe dalla tabella hash senza corrispondenze, quindi scansionare la tabella hash e restituire tutte le voci.

Hash Match è un operatore fisico. Per altre informazioni, vedere Informazioni sugli hash join.
Eliminazione indice L'operatore Index Delete elimina le righe dall'indice non cluster specificato nel riquadro Proprietà.

Index Delete è un operatore fisico.
Inserimento indice L'operatore Index Insert inserisce righe del proprio input nell'indice non cluster specificato nel riquadro Proprietà. Il riquadro Proprietà contiene anche un predicato set, che indica il valore su cui è impostata ogni colonna.

Index Insert è un operatore fisico.
Scansione dell'indice L'operatore Index Scan recupera tutte le righe dall'indice non cluster specificato nel riquadro Proprietà. Se appare un predicato where facoltativo nel riquadro Proprietà, vengono restituite solo le righe che soddisfano il predicato. Se la proprietà Ordered è Impostata su True, le righe vengono restituite nell'ordine in cui l'indice non cluster li ha ordinati. Se la proprietà Ordered è False, il motore di database analizza l'indice senza garantire l'ordine dell'output.

Index Scan è un operatore logico e fisico.
Ricerca tramite indice L'operatore Index Seek usa le funzionalità di ricerca degli indici per recuperare righe da un indice non cluster. La colonna del riquadro Proprietà contiene il nome dell'indice non cluster usato. Include anche il predicato seek. Il motore di database usa l'indice per elaborare solo le righe che soddisfano il predicato Seek. Potrebbe includere anche un predicato where, che viene valutato dal motore di database per tutte le righe che soddisfano il predicato seek (a tal fine, gli indici non vengono usati).

Index Seek è un operatore logico e fisico.
Indice Spool L'operatore Index Spool contiene un predicato seek nel riquadro Proprietà. L'operatore Index Spool analizza le righe di input, posizionando una copia di ogni riga in un file di spooling nascosto (archiviato nel database tempdb ed esistente solo per la durata della query) e compila un indice sulle righe. Ciò consente l’uso della funzionalità di ricerca degli indici per restituire solo le righe che soddisfano il predicato seek.

Index Spool è un operatore fisico.
Aggiornamento dell'indice L'operatore fisico Index Update aggiorna righe del proprio input nell'indice non cluster specificato nel riquadro Proprietà. Se è stato specificato un predicato set, ogni colonna aggiornata viene impostata su questo valore.

Index Update è un operatore fisico.
Inner join L'operatore logico Inner Join restituisce ogni riga che soddisfa il predicato di join del primo input (superiore) con il secondo input (inferiore).

Inner Join è un operatore logico.
Insert L'operatore Insert inserisce ogni riga del proprio input nell'oggetto specificato nel riquadro Proprietà. L'operatore fisico è l'operatore Table Insert, Index Insert o Clustered Index Insert.

Insert è un operatore logico.
Analisi inserita L'operatore Inserted Scan analizza la tabella inserita.

Inserted Scan è un operatore logico e fisico.
Intrinsic L’operatore Intrinsic richiama una funzione Transact-SQL interna.

Intrinsic è un elemento del linguaggio.
Iterator L'icona predefinita Iterator viene visualizzata quando la logica che produce showplan grafici non trova un'icona appropriata per l'iteratore. L'icona catchall non indica necessariamente una condizione di errore.
Ricerca chiave L'operatore Key Lookup è una ricerca tramite segnalibro in una tabella con un indice cluster o un indice columnstore clusterizzato. Per un indice cluster, il riquadro Proprietà contiene il nome dell'indice cluster e la chiave di clustering usata per cercare la riga. Per un indice columnstore clusterizzato, viene fornito ColStoreLoc anziché la chiave di clustering. L'operatore Key Lookup è sempre accompagnato dal un operatore Nested Loops. Se appare la clausola WITH PREFETCH nel riquadro Proprietà, Query Processor ha determinato che l’uso del prefetching asincrono (read-ahead) è ottimale durante la ricerca di segnalibri in nell’indice cluster.

Una ricerca chiave con un numero elevato di esecuzioni relative alle dimensioni della tabella può trarre vantaggio dall'aggiunta di un indice di copertura. Un numero ridotto di esecuzioni non è in genere un problema di prestazioni.
Keyset L'operatore Keyset usa un cursore in grado di riconoscere gli aggiornamenti, ma non gli inserimenti, eseguiti da altri.

Keyset è un operatore fisico.
Elemento Linguistico L'icona generica Language Element viene visualizzata quando una logica che produce grafici showplan non è in grado di individuare un'icona appropriata per l'iteratore. L'icona catchall non indica necessariamente una condizione di errore.
Lazy Spool L'operatore logico Lazy Spool archivia ogni riga del proprio input in un oggetto temporaneo nascosto archiviato nel database tempdb. Se viene effettuato il rewind dell'operatore, ad esempio tramite un operatore Nested Loops, ma non è necessario un nuovo rebind, i dati memorizzati nello spool vengono utilizzati invece di eseguire una nuova analisi dell’input. Se è necessario eseguire nuovamente il rebind, i dati di spooling vengono eliminati e l'oggetto di spooling viene rigenerato tramite una nuova analisi dell'input (di cui è stato eseguito il rebind). L'operatore Lazy Spool genera un proprio file di spooling in maniera “lazy”, vale a dire che ogni volta che l'operatore padre dello spooling chiede una riga, anziché usare contemporaneamente tutte le righe, l'operatore di spooling ottiene una riga dal proprio operatore di input e la archivia nel file di spooling.

Lazy Spool è un operatore logico.
None. Left Anti Semi Join (un tipo di operazione di join nei database che restituisce righe dalla prima tabella che non hanno corrispondenze nella seconda tabella) L'operatore Left Anti Semi Join restituisce ogni riga del primo input (superiore) in assenza di una riga corrispondente nel secondo input (inferiore). Se non esiste alcun predicato di join nel riquadro Proprietà, ogni riga è una riga corrispondente.

Left Anti Semi Join è un operatore logico.
None. Join Esterno Sinistro L'operatore Left Outer Join restituisce ogni riga che soddisfa il predicato di join del primo input (superiore) con il secondo input (inferiore). L'operatore restituisce anche tutte le righe del primo input che non hanno righe corrispondenti nel secondo input. Le righe non corrispondenti nel secondo input vengono restituite come valori Null. Se non esiste alcun predicato di join nel riquadro Proprietà, ogni riga è una riga corrispondente.

Left Outer Join è un operatore logico.
None. Left Semi Join L'operatore Left Semi Join restituisce ogni riga del primo input (superiore) quando esiste una riga corrispondente nel secondo input (inferiore). Se non esiste alcun predicato di join nel riquadro Proprietà, ogni riga è una riga corrispondente.

Left Semi Join è un operatore logico.
Scansione delle Righe di Log L'operatore Log Row Scan analizza il log delle transazioni.

Log Row Scan è un operatore logico e fisico.
Intervallo di unione L'operatore Merge Interval unisce più intervalli (potenzialmente sovrapposti) per restituire intervalli minimi non sovrapposti da usare per la ricerca di voci di indice. Questo operatore generalmente appare prima di uno o più operatori Compute Scalar sopra gli operatori Constant Scan, che costruiscono gli intervalli (rappresentati da colonne di una riga) che questo operatore unisce.

Merge Interval è un operatore logico e fisico.
Merge Join L'operatore Merge Join esegue l'inner join, il left outer join, il left semi join, il left anti semi join, il right outer join, il right semi join, il right anti semi join, il full outer join, la concatenazione e le operazioni logiche di union.

Nel riquadro Proprietà, l’operatore Merge Join contiene un predicato merge se l’operazione esegue un join one-to-many oppure un predicato many-to-many merge se l’operazione esegue un join many-to-many. Il riquadro Proprietà include anche un elenco separato da virgole delle colonne usate per l'esecuzione dell'operazione. L'operatore Merge Join richiede due input ordinati in base alle rispettive colonne, eventualmente tramite l'inserimento di operazioni di ordinamento esplicite nel piano di query. Merge Join è particolarmente efficace se non è richiesto l'ordinamento esplicito, ad esempio se nel database è presente un indice ad albero B adeguato o se il tipo di ordinamento può essere sfruttato per più operazioni, ad esempio merge join e raggruppamenti con rollup.

Merge Join è un operatore fisico. Per ulteriori informazioni, consultare Understanding Merge joins.
Cicli annidati L'operatore Nested Loops esegue le operazioni logiche inner join, left outer join, left semi join e left anti semi join.

I join di cicli annidati eseguono l'input interno (inferiore) una volta per ogni riga dell'input esterno (superiore). Quando la proprietà Outer References è presente, il join è dinamico: i valori di colonna elencati dalla riga esterna vengono inseriti nell'input interno in modo che i relativi operatori restituiscano solo righe corrispondenti. La proprietà Predicate non viene usata in questo caso. Quando i riferimenti esterni sono assenti , il join è statico: l'input interno restituisce le stesse righe per ogni esecuzione e un predicato nel riquadro Proprietà determina le combinazioni qualificate come corrispondenze.

Quando l'attributo OPTIMIZED è impostato su True, l'operatore riordina l'input esterno per migliorare la località di I/O durante l'accesso all'input interno. Questa operazione viene talvolta definita join a cicli annidati ottimizzati.

Nested Loops è un operatore fisico. Per ulteriori dettagli, vedere Comprendere i join a cicli annidati.
None. Inserimento indice online L'operatore Online Index Insert indica che un’operazine sull’indice (create, alter o drop) viene eseguita online. I dati della tabella sottostante rimangono disponibili agli utenti durante l'operazione sull'indice.

Online Index Insert è un operatore fisico.
Nessuno Parallelism L'operatore Parallelism (o iteratore di scambio) esegue le operazioni logiche di distribuzione dei flussi, raccolta dei flussi e ripartizione dei flussi. Il riquadro Proprietà può contenere un predicato partition columns con un elenco delimitato da virgole delle colonne partizionate. Il riquadro Proprietà può contenere anche un predicato order by che elenca le colonne di cui deve essere mantenuto l'ordinamento durante il partizionamento.

Nota: se una query è stata compilata come query parallela ma in fase di runtime viene eseguita come query seriale, l’output dello showplan generato da SET STATISTICS XML o usando l’opzione Includi piano di esecuzione effettivo in SQL Server Management Studio, non contiene l’elemento RunTimeInformation per l’operatore Parallelism. Nell’output SET STATISTICS PROFILE, i conteggi delle righe effettive e il numero effettivo di esecuzioni visualizzano zeri per l’operatore Parallelism. Quando si verifica una delle condizioni, l'operatore Parallelism è stato usato solo durante la compilazione delle query e non nel piano di query di runtime. A volte i piani di query paralleli vengono eseguiti in serie se il carico simultaneo sul server è elevato.

Parallelism è un operatore fisico. Per altre informazioni sull'operatore Parallelism, vedere L’operatore Parallelism.
Scansione della tabella dei parametri L'operatore Parameter Table Scan legge il set di righe interno generato durante un'istruzione INSERT ... EXEC . Questo set di righe contiene l'output del modulo eseguito, ad esempio una stored procedure o un batch SQL dinamico, quando tali risultati vengono inseriti in una tabella, una tabella temporanea o una variabile di tabella.

Parameter Table Scan è un operatore logico e fisico.
None. Aggregazione parziale L'aggregazione parziale viene in genere usata nei piani paralleli. Applica una funzione di aggregazione al maggior numero possibile di righe di input in modo che la scrittura su disco (nota come "spill") non sia necessaria. Hash Match è l'unico operatore fisico (iteratore) che implementa l'aggregazione parziale.

Partial Aggregate è un operatore logico.
Query sulla popolazione All'apertura di un cursore, l'operatore Population Query popola la tabella di lavoro di un cursore quando il cursore è aperto.

Population Query è un operatore fisico.
Inserire L'operatore Put inserisce i dati in una tabella esterna (PolyBase). A differenza di altri operatori di inserimento, Put non restituisce righe all'operatore padre. In SQL Server 2016 (da 13,x) a SQL Server 2019 (15.x), l'operatore Put è destinato a Hadoop ed eseguito in modalità riga. In SQL Server 2022 (16.x) e versioni successive, l'operatore Put ha come destinazione Archiviazione di Azure o archiviazione compatibile con S3 e viene eseguita in modalità batch. Per altre informazioni, vedere CREATE EXTERNAL TABLE AS SELECT (CETAS).

Put è un operatore fisico.

Si applica a: SQL Server 2016 (13.x) e versioni successive.
Aggiorna query L'operatore Refresh Query recupera i dati correnti per le righe nel buffer di recupero.

Refresh Query è un operatore fisico.
Eliminazione remota L'operatore Remote Delete elimina le righe di input da un oggetto remoto.

Remote Delete è un operatore logico e fisico.
Analisi indice remoto L’operatore Remote Index Scan analizza l'indice remoto specificato nel riquadro Proprietà.

Remote Index Scan è un operatore logico e fisico.
Ricerca remota per indice L'operatore Remote Index Seek usa le capacità di ricerca di un oggetto indice remoto per il recupero di righe. Il riquadro Proprietà contiene il nome dell’indice remoto usato e il predicato seek.

Remote Index Seek è un operatore logico, fisico.
Inserimento remoto L'operatore Remote Insert inserisce le righe di input in un oggetto remoto.

Remote Insert è un operatore logico e fisico.
Query remota L'operatore Remote Query invia una query a un'origine remota. Il testo della query inviata al server remoto viene visualizzato nel riquadro Proprietà.

Remote Query è un operatore logico e fisico.
Analisi remota L'operatore Remote Scan analizza un oggetto remoto. Il nome dell'oggetto remoto viene visualizzato nel riquadro Proprietà.

Remote Scan è un operatore logico e fisico.
Aggiornamento remoto L'operatore Remote Update aggiorna le righe di input in un oggetto remoto.

Remote Update è un operatore logico e fisico.
Flussi di ripartizione L'operatore Repartition Streams (o iteratore di scambio) usa più flussi e produce più flussi di record. Il contenuto e il formato del record non vengono modificati. Se Query Optimizer usa un filtro bitmap, il numero di righe nel flusso di output viene ridotto. Ogni record di un flusso di input viene inserito in un flusso di output. Se l'operatore conserva l'ordine, tutti i flussi di input devono essere ordinati e uniti in vari flussi di output ordinati. Se l'output è partizionato, il riquadro Proprietà contiene un predicato partition columns e le colonne di partizionamento. Se l’output è ordinato, il riquadro Proprietà contiene un predicato order by e le colonne ordinate. L'operatore viene usato solo in piani di query paralleli.

Repartition Streams è un operatore logico.
Risultato L'operatore Result corrisponde ai dati restituiti alla fine di un piano di query. Generalmente è l'elemento radice di uno showplan.

Result è un elemento del linguaggio.
Ricerca RID RID Lookup è una ricerca di segnalibri in un heap mediante un identificatore di riga (RID). Il riquadro Proprietà contiene l'etichetta del segnalibro usata per la ricerca della riga nella tabella e il nome della tabella in cui viene cercata la riga. Rid Lookup è sempre accompagnato da un operatore Nested Loops .

RID Lookup è un operatore fisico. Per altre informazioni sulle ricerche di segnalibri, vedere Read Committed and Bookmark Lookup.
None. Right Anti Semi Join L'operatore Right Anti Semi Join restituisce ogni riga del secondo input (inferiore) quando non esiste una riga corrispondente nel primo input (superiore). Una riga corrispondente è definita come riga che soddisfa il predicato nel riquadro Proprietà; se non esiste alcun predicato, ogni riga è una riga corrispondente.

Right Anti Semi Join è un operatore logico.
None. Join esterno destro L'operatore logico Right Outer Join restituisce ogni riga che soddisfa il join del secondo input (inferiore) con ogni riga corrispondente del primo input (superiore). L'operatore restituisce anche tutte le righe del secondo input che non avevano righe corrispondenti nel primo input, unite con NULL. Se non esiste alcun predicato di join nel riquadro Proprietà, ogni riga è una riga corrispondente.

Right Outer Join è un operatore logico.
None. Semijoin destro L'operatore Right Semi Join restituisce ogni riga del secondo input (inferiore) quando esiste una riga corrispondente nel primo input (superiore). Se non esiste alcun predicato di join nel riquadro Proprietà, ogni riga è una riga corrispondente.

Right Semi Join è un operatore logico.
Conteggio righe spool L'operatore Row Count Spool analizza l’input, conteggiando il numero di righe presenti e restituendo lo stesso numero di righe senza dati. Questo operatore viene usato quando è importante verificare l'esistenza delle righe anziché i dati contenuti nelle righe. Ad esempio, se un operatore Nested Loops esegue un'operazione di left semi join e il predicato di join si applica all'input interno, potrebbe essere inserito uno spool del conteggio delle righe nella parte superiore dell'input interno dell'operatore Nested Loops. In tal modo, l'operatore Nested Loops può determinare quante righe vengono emesse dallo spool di conteggio righe (poiché i dati effettivi dal lato interno non sono necessari) per verificare se restituire la riga esterna.

Row Count Spool è un operatore fisico.
None. Segment Repartition In un piano di query parallelo a volte sono presenti regioni concettuali di iteratori. Tutti gli iteratori all'interno di tale area possono essere eseguiti su thread paralleli. Le aree stesse devono essere eseguite in modo seriale. Alcuni iteratori Parallelism all'interno di una singola regione sono denominati Branch Repartition. L'operatore Parallelism al confine tra due regioni di questo tipo viene denominato Segment Repartition.

Branch Repartition e Segment Repartition sono operatori logici.
Segmento L’operatore Segment divide il set di input in segmenti in base al valore di una o più colonne. Tali colonne vengono visualizzate come argomenti nell'operatore Segment L'input viene ordinato in base a queste colonne. L'operatore usa la colonna segmento per contrassegnare la prima riga di ogni segmento.

Segment è un operatore fisico e logico.
Progetto Sequenza L'operatore Sequence Project consente di aggiungere colonne per eseguire calcoli in un set ordinato. Richiede la divisione del set di input in segmenti in base al valore di una o più colonne.

Sequence Project è un operatore logico e fisico.
Sequenza L'operatore Sequence esegue ogni input in sequenza (dall'alto verso il basso) e restituisce solo le righe provenienti dall'ultimo input (inferiore). Gli usi comuni includono piani di aggiornamento estesi (in cui ogni input è in genere un aggiornamento di un oggetto diverso), query che usano funzioni con valori di tabella con più istruzioni e query che usano SHORTEST_PATH in una tabella a grafo.

Sequence è un operatore logico e fisico.
Snapshot L'operatore Snapshot crea un cursore che non visualizza modifiche apportate da altri.

Snapshot è un operatore fisico.
Sort L'operatore Sort ordina tutte le righe in ingresso. Il riquadro Proprietà contiene un predicato distinct order by se i duplicati vengono rimossi da questa operazione oppure un predicato order by con un elenco separato da virgole delle colonne ordinate. Alle colonne viene anteposto un prefisso con il valore ASC se le colonne sono ordinate in ordine crescente oppure il valore DESC se le colonne sono ordinate in ordine decrescente.

Sort è un operatore logico e fisico.
Suddivisione L'operatore Split consente di ottimizzare l'elaborazione degli aggiornamenti. Ogni operazione di aggiornamento viene suddivisa in un'operazione di eliminazione e un'operazione di inserimento.

Split è un operatore logico e fisico.
Spool L'operatore Spool salva risultati di query intermedi nel database tempdb.
Aggregazione di flusso L'operatore Stream Aggregate raggruppa le righe in base a una o più colonne, quindi calcola una o più espressioni di aggregazione restituite dalla query. Per l'operatore Stream Aggregate l'input deve essere ordinato in base alle colonne all'interno dei relativi gruppi. Optimizer usa un operatore Sort prima di questo operatore se i dati non sono ancora ordinati a causa di un operatore Sort precedente o di un’analisi o una ricerca di un indice ordinato. Nell’istruzione SHOWPLAN_ALL o nel piano di esecuzione grafico in SQL Server Management Studio, le colonne le predicato group by sono elencate nel riquadro Proprietà e le espressioni di aggregazione sono elencate nella colonna Valori definiti.

Stream Aggregate è un operatore fisico.
Switch Switch è un tipo speciale di iteratore di concatenazione con n input. A ogni operatore Switch è associata un'espressione. A seconda del valore restituito dell'espressione (compreso tra 0 e n-1), Switch esegue l'input appropriato e restituisce le relative righe. Switch viene usato per implementare piani di query per INSERT INTO istruzioni contro viste partizionate. Viene utilizzato anche per implementare piani di query che coinvolgono cursori con avanzamento rapido e determinati operatori, come l'operatore TOP.

Switch è un operatore logico e fisico.
Eliminazione tabella L'operatore Table Delete elimina righe dalla tabella specificata nel riquadro Proprietà del piano di esecuzione query.

Table Delete è un operatore fisico.
Inserimento tabella L'operatore Table Insert inserisce righe dal proprio input nella tabella specificata nel riquadro Proprietà del piano di esecuzione query. Il riquadro Proprietà contiene anche un predicato set, che indica il valore su cui è impostata ogni colonna. Se Table Insert non ha elementi figlio per i valori da inserire, la riga inserita viene presa dall'operatore di inserimento stesso.

Table Insert è un operatore fisico.
Unione tabelle L'operatore Table Merge applica un flusso di dati di unione a un heap. L'operatore elimina, aggiorna o inserisce righe nella tabella specificata nel riquadro Proprietà dell'operatore. L'operazione effettiva eseguita dipende dal valore di runtime della proprietà ActionColumn

Table Merge è un operatore fisico.
Scansione della tabella L'operatore Table Scan recupera tutte le righe dalla tabella specificata nel riquadro Proprietà del piano di esecuzione query. Se appare un predicato where nel riquadro Proprietà, vengono restituite solo le righe che soddisfano il predicato.

Table Scan è un operatore logico e fisico.
Pool di tabelle L'operatore Table Spool analizza l'input e inserisce una copia di ogni riga in una tabella di spooling nascosta archiviata nel database tempdb solo per la durata della query. Se l'operatore viene riavvolto, ad esempio tramite un operatore Nested Loops, ma non è necessario il rebinding, vengono usati i dati di spooling invece di eseguire una nuova analisi dell’input.

Table Spool è un operatore fisico.
Aggiornamento tabella L'operatore Table Update aggiorna le righe di input nella tabella specificata nel riquadro Proprietà del piano di esecuzione query. Il predicato set determina il valore di ogni colonna aggiornata. Un riferimento a tali valori può essere presente nella clausola SET o altrove nell'operatore o nella query.

Aggiornamento Tabella è un operatore fisico.
Funzione con valori di tabella L’operatore Table-valued Function valuta una funzione con valori di tabella (Transact-SQL o CLR) e archivia le righe risultanti nel database tempdb. Quando gli iteratori padre richiedono le righe, Table-valued Function restituisce le righe da tempdb.

Le query con chiamate a funzioni con valori di tabella generano piani di query con l'iteratore Table-valued Function. Table-valued Function può essere valutato con valori di parametri differenti:

- Table-valued Function XML Reader specifica come parametro di input un BLOB XML e produce un set di righe che rappresentano nodi XML nell'ordine di un documento XML. Altri parametri di input potrebbero limitare i nodi XML restituiti a un sottoinsieme di un documento XML.

- Table Valued Function XML Reader con filtro XPath è un tipo speciale di XML Reader Table-valued Function che limita l'output ai nodi XML che soddisfano un'espressione XPath.

Table-valued Function è un operatore logico e fisico.
In alto L'operatore Top analizza l'input e restituisce solo il primo numero o valore percentuale di righe specificato, eventualmente in base a un ordinamento. Il riquadro Proprietà può contenere un elenco delle colonne in cui viene controllata la presenza di collegamenti. Nei piani di aggiornamento, l'operatore Top viene utilizzato per imporre limiti al conteggio delle righe.

Top è un operatore logico e fisico.
None. Top N Sort Top N Sort è simile all'iteratore Sort ma richiede solo le prime N righe e non l'intero set di risultati. Per valori bassi di N, il motore di esecuzione query di SQL Server tenta l’esecuzione dell'intera operazione di ordinamento in memoria. Per valori alti di N, il motore di esecuzione query ricorre al metodo di ordinamento più generico in cui N non è un parametro.
UDX Gli operatori estesi (UDX) implementano una delle varie operazioni XQuery e XPath in SQL Server.

- L'operatore esteso (UDX) FOR XML viene usato per serializzare il set di righe relazionali che inserisce nella rappresentazione XML in una singola colonna BLOB in una singola riga di output. È un operatore di aggregazione XML sensibile all'ordinamento.

- L'operatore esteso (UDX) XML SERIALIZER è un operatore di aggregazione XML sensibile all'ordine. Inserisce righe che rappresentano nodi XML o valori scalari XQuery nell'ordine dei documenti XML e genera un BLOB XML serializzato in una singola colonna XML in una singola colonna di output.

- L'operatore esteso (UDX) XML FRAGMENT SERIALIZER è un tipo speciale di XML SERIALIZER utilizzato per l'elaborazione di righe di input che rappresentano frammenti XML inseriti tramite l'estensione di modifica dei dati di inserimento in XQuery.

- L'operatore esteso (UDX) XQUERY STRING valuta il valore della stringa XQuery delle righe di input che rappresentano nodi XML. È un operatore di aggregazione di stringhe sensibile all'ordine. Restituisce come output una sola riga con colonne che rappresentano lo scalare XQuery contenente il valore stringa dell'input.

- L'operatore esteso (UDX) XQUERY LIST DECOMPOSER è un operatore di scomposizione dell'elenco XQuery. Per ogni riga di input che rappresenta un nodo XML, produce una o più righe, ognuna delle quali rappresenta uno scalare XQuery contenente il valore dell’elemento di un elenco se l'input è di tipo elenco XSD.

- L'operatore esteso (UDX) XQUERY DATA valuta la funzione XQuery fn:data() sull'input che rappresenta i nodi XML. È un operatore di aggregazione di stringa sensibile all'ordine. Restituisce come output una sola riga con colonne che rappresentano lo scalare XQuery contenente il risultato di fn:data().

- L'operatore XQUERY CONTAINS esteso valuta la funzione XQuery fn:contains() sull'input che rappresenta i nodi XML. È un operatore di aggregazione di stringa sensibile all'ordine. Restituisce come output una sola riga con colonne che rappresentano lo scalare XQuery contenente il risultato di fn:contains().

- L'operatore UPDATE XML NODE aggiornato aggiorna il nodo XML nell'estensione di modifica dei dati XQuery nel metodo modify() del tipo XML.

Gli operatori UDX sono sia logici che fisici.
Union L'operatore Union analizza più input, restituendo ogni riga analizzata e rimuovendo i duplicati.

Union è un operatore logico.
Update L'operatore Update aggiorna ogni riga dal proprio input nell'oggetto specificato nel riquadro Proprietà del piano di esecuzione query.

Update è un operatore logico. L'operatore fisico è Table Update, Index Update, Clustered Index Update o Columnstore Index Update.
None. Aggregazione finestra L'operatore Window Aggregate valuta una o più espressioni di aggregazione con una definizione di finestra e aggiunge i risultati al flusso di dati.

Window Aggregate è un operatore logico e fisico.
Window Spool L'operatore Window Spool espande ogni riga nel set di righe che rappresenta la finestra associata. In una query, la clausola OVER definisce la finestra all'interno di un set di risultati della query; una funzione della finestra, quindi, calcola un valore per ogni riga nella finestra. L'operatore archivia tutte le righe di input in una tabella di lavoro nascosta nel database tempdb o in memoria.

Window Spool è un operatore logico e fisico.

Nota

Nella documentazione viene usato in modo generico il termine albero B in riferimento agli indici. Negli indici rowstore, il motore di database implementa un albero B+. Ciò non si applica a indici columnstore o a indici in tabelle ottimizzate per la memoria. Per altre informazioni, vedere Architettura e guida per la progettazione degli indici di SQL Server e Azure SQL.