Guida di riferimento per operatori showplan fisici e logici
Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure
Gli operatori descrivono la modalità con cui SQL Server esegue una query o un'istruzione Data Manipulation Language (DML). In Query Optimizer gli operatori consentono di compilare un piano di query per ottenere i risultati specificati nella query o per eseguire l'operazione specificata nell'istruzione DML. Il piano di query è un albero composto da operatori fisici È possibile visualizzare il piano di query usando le istruzioni SET SHOWPLAN
, le opzioni del piano di esecuzione grafico in SQL Server Management Studio oppure gli eventi showplan di eventi estesi.
Gli operatori sono suddivisi in operatori logici e fisici.
Operatori logici
Gli operatori logici descrivono l'operazione algebrica relazionale utilizzata per elaborare un'istruzione, ovvero 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 possono influire sulle prestazioni.
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 metodoOpen()
, un operatore fisico inizializza se stesso e configura le strutture dei dati necessarie. Anche se l'operatore fisico potrebbe ricevere molte chiamateOpen()
, generlamente ne riceve solo una.GetRow()
: con il metodoGetRow()
, un operatore fisico ottiene la prima riga di dati o la successiva. L’operatore fisico può ricevere numerose chiamateGetRow()
o nessuna chiamata.Close()
: con il metodoClose()
, un operatore fisico esegue alcune operazioni di pulizia e si arresta. Un operatore fisico riceve una sola chiamataClose()
, ma una chiamataClose()
non è sempre garantita.
Il metodo GetRow()
restituisce una sola riga di dati e il numero di volte che viene chiamato appare come ActualRows nell’output dello showplan prodotto dallo showplan XML e grafico. Per altre informazioni su queste opzioni SET
, vedere SET STATISTICS PROFILE (Transact-SQL) e SET STATISTICS XML (Transact-SQL).
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 join ciclico, il numero totale di rebind e 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 dello showplan XML prodotto usando SET STATISTICS XML ON
e lo showplan grafico. Vengono popolati solo per gli operatori Nonclustered Index Spool, Remote Query, Row Count Spool, Sort, Table Spool e Table-valued Function. Anche ActualRebinds e ActualRewinds potrebbero essere popolati per gli operatori 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 effettivo viene visualizzato zero per i rebind e i rewind effettivi quando sono assenti.
Un contatore correlato, ActualEndOfScans, è disponibile nello showplan grafico e XML. 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 rebind e rewind, il conteggio di fine analisi può essere maggiore di uno solo se l’operatore si trova nel lato interno di un join ciclico. Il conteggio di fine analisi deve essere minore o uguale alla somma del numero di rebind e rewind.
Eseguire la mappatura di operatori logici e fisici
Query Optimizer crea un piano di query che consiste in un albero di operatori logici. Dopo la creazione del piano, Query Optimizer sceglie l'operatore fisico più efficiente per ogni operatore logico. L'ottimizzatore delle query usa un approccio basato sul costo 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.
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 vista Piano di query di SQL Server Management Studio (SSMS) e Azure Data Studio.
Suggerimento
Se una determinata icona del piano di esecuzione grafico ha un cerchio giallo con due frecce da destra a sinistra, significa che l'operatore viene eseguito in parallelo. Per altre informazioni sul parallelismo, vedere Guida sull'architettura dei thread e delle attività.
Icon | 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. |
|
Aggregazione | L’operatore Aggregate calcola un’espressione contenente MIN , MAX , SUM , COUNT o AVG .Aggregate è un operatore logico e fisico. |
|
Arithmetic Expression | 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. |
|
Assign | 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 figlio sono normalmente 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. |
Bitmap | SQL Server usa l'operatore Bitmap per implementare l'applicazione di filtri bitmap in piani di query paralleli. L'applicazione di filtri bitmap velocizza l'esecuzione delle query eliminando le righe con valori di chiave che non possono produrre record di join prima di passare le 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. Query Optimizer determina quando un bitmap è sufficientemente selettivo per essere utile e a quali operatori il filtro viene applicato. 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. |
|
Nessuno | Branch Repartition | In un piano di query parallelo a volte sono presenti regioni concettuali di iteratori. Tutti gli iteratori all'interno di tale regione possono essere eseguiti mediante thread paralleli. Le regioni in sé devono essere eseguite in modalità 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ù consumer 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. | |
Build Hash | Indica la generazione di una tabella hash in batch per un indice columnstore ottimizzato per la memoria. Si applica solo a: SQL Server 2012 (11.x). |
|
Clustered Index Delete | 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: le modifiche apportate agli indici cluster potrebbero influire su indici non cluster. Clustered Index Delete è un operatore fisico. |
|
Clustered Index Insert | 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 esistono figli per i valori di inserimento, riga inserita viene acquisita dall'operatore Insert stesso. Nota: le modifiche apportate agli indici cluster potrebbero influire su indici non cluster. Clustered Index Insert è un operatore fisico. |
|
Clustered Index Merge | 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: le modifiche apportate agli indici cluster potrebbero influire su indici non cluster. Clustered Index Merge è un operatore fisico. |
|
Clustered Index Scan | L'operatore Clustered Index Delete analizza l'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 in modo ottimale, senza necessariamente ordinare l'output. 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. 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 esegue la ricerca nell'indice in modo ottimale, senza necessariamente ordinare l'output. Il mantenimento dell'ordinamento dell'output può essere meno efficiente rispetto alla produzione di un output non ordinato. Clustered Index Seek è un operatore logico e fisico. |
|
Clustered Index Update | L'operatore Clustered Index Delete aggiorna le righe di input nell'indice cluster specificato nella proprietà Object elencata nel riquadro Proprietà degli showplan XML e grafici. 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: le modifiche apportate agli indici cluster potrebbero influire su indici non cluster. Clustered Index Update è un operatore logico e fisico. |
|
Collapse | 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. |
|
Columnstore Index Delete | L'operatore Clustered Index Delete rappresenta l’eliminazione di righe dall'indice columnstore specificato nella proprietà Object elencata nel riquadro Proprietà degli showplan XML e grafici. 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 o ViewNonClustered) è specificato nella proprietà IndexKind nello showplan XML. SeekPredicate non è supportato per Columnstore Index Delete. Le righe da eliminare vengono lette da un operatore figlio. Columnstore Index Delete è un operatore fisico. |
|
Columnstore Index Insert | L'operatore Clustered Index Delete rappresenta l’inserimento di righe dal relativo input nell'indice columnstore specificato nella proprietà Object elencata nel riquadro Proprietà degli showplan XML e grafici. 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 o ViewNonClustered) è 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. Nota: le modifiche apportate agli indici cluster potrebbero influire su indici non cluster. Columnstore Index Insert è un operatore fisico. |
|
Columnstore Index Merge | 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. L'operazione effettiva eseguita dipende dal valore di runtime della proprietà ActionColumn. Nota: le modifiche apportate agli indici cluster potrebbero influire su indici non cluster. Columnstore Index Insert è un operatore fisico. |
|
Columnstore Index Scan | L'operatore Clustered Index Delete rappresenta un’analisi dell’indice columnstore specificato nella proprietà Object elencata nel riquadro 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 o ViewNonClustered) è 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 è nel predicato della query, l’eliminazione della partizione può ridurre il numero di gruppi di righe da analizzare. Columnstore Index Scan è un operatore fisico. |
|
Columnstore Index Update | L'operatore Clustered Index Update rappresenta un aggiornamento di una o più righe nell’indice columnstore specificato nella proprietà Object elencata 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 o ViewNonClustered) è specificato nella proprietà IndexKind nello showplan XML. SeekPredicate non è supportato per Columnstore Index Update. Le righe da aggiornare vengono lette da un operatore figlio. 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: le modifiche apportate agli indici cluster potrebbero influire su indici non cluster. Columnstore Index Update è un operatore fisico. |
|
Compute Scalar | 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 di rebind e rewind negli showplan generati da SET STATISTICS XML .Compute Scalar è un operatore logico e fisico. |
|
Concatenation | 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. |
|
Conditional (If e While) | L’operatore Conditional esegue un'elaborazione condizionale basata su un loop IF o WHILE . If e While sono elementi del linguaggio. |
|
Constant Scan | 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. | |
Convert | L'operatore Convert converte un tipo di dati scalare in un altro. Convert è un elemento del linguaggio. |
|
Cross Join | L'operatore Cross Join crea 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 dell'esecuzione di un cursore implica 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à. | |
Deleted Scan | Nei trigger, l’operatore Deleted Scan analizza la tabella eliminata. | |
None | Distinct | L'operatore Distinct rimuove i duplicati da un set di righe o da una raccolta di valori. Distinct è un operatore logico. |
None | Distinct Sort | 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. |
Distribute Streams | 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 appare in uno dei 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. | |
Eager Spool | L'operatore Eager Spool acquisisce l'intero input archiviando ogni riga in un oggetto temporaneo nascosto archiviato nel database tempdb. Se viene eseguito il rewind dell'operatore, ad esempio tramite un operatore Nested Loops, ma non è necessario eseguire nuovamente il rebind, 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 proprio file di spooling tramite “eager”: quando l'operatore padre dello spooling chiede la prima riga, l'operatore di spooling usa tutte le righe dal proprio operatore di input e le archivia nello spooling. Eager Spool è un operatore logico. |
|
Fetch Query | L'operatore Fetch Query richiama le righe quando viene emesso un recupero per un cursore. | |
Filter | L'operatore Filter analizza l'input restituendo solo le righe che soddisfano l'espressione di filtro (predicato) che appare nel riquadro Proprietà. | |
None | Flow Distinct | 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. |
Foreign Key References Check | 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 | 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: - Dal primo input senza corrispondenze nel secondo input. - Dal secondo input senza corrispondenze nel primo input. L'input che non contiene valori corrispondenti viene restituito come valore Null. Full Outer Join è un operatore logico. |
|
Gather Streams | L'operatore logico Gather Streams viene usato esclusivamente in piani di query paralleli. L’operatore Gather Streams usa vari flussi di input e quindi un singolo flusso di output di record combinando 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. |
|
Hash Match | 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, identificato da RESIDUAL:() nel riquadro Proprietà, deve essere soddisfatto anche questo predicato affinché le righe vengano considerate una corrispondenza. Il comportamento dipende dell'operazione logica eseguita:- Per tutti i join, usare il primo input (superiore) per la compilazione della tabella hash e il secondo input (inferiore) per l'esecuzione del probe nella 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 generata la tabella hash, analizzare tutte le voci della tabella e dell’output. 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 eseguire il probe della tabella hash, restituendo tutte le righe senza corrispondenze, quindi analizzare la tabella hash e restituire tutte le voci. Hash Match è un operatore fisico. Per altre informazioni, vedere Informazioni sugli hash join. |
|
Index Delete | L'operatore Index Delete elimina le righe dall'indice non cluster specificato nel riquadro Proprietà. Index Delete è un operatore fisico. |
|
Index Insert | 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. |
|
Index Scan | 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. Index Scan è un operatore logico e fisico. |
|
Index Seek | 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). Se il riquadro Proprietà contiene la clausola ORDERED , Query Processor ha determinato che le righe devono essere restituite nello stesso ordine usato dall'indice non cluster. Se la clausola ORDERED è assente, il motore di database esegue una ricerca nell’indice in modo ottimale (che non garantisce l’ordinamento dell’output). Il mantenimento dell'ordinamento dell'output potrebbe essere meno efficiente della produzione di un outout non ordinato.Index Seek è un operatore logico e fisico. |
|
Index Spool | L'operatore Index Spool contiene un predicato seek nel riquadro Proprietà. L'operatore Index Spool analizza le proprie righe di input e inserisce una copia di ogni riga in un file di spooling nascosto (archiviato nel database tempdb e con durata equivalente a quella della query), quindi genera un indice non cluster sulle righe. Ciò consente l’uso della funzionalità di ricerca degli indici per restituire solo le righe che soddisfano il predicato seek. Se viene eseguito il rewind dell'operatore, ad esempio tramite un operatore Nested Loops, ma non è necessario eseguire nuovamente il rebind, vengono usati i dati di spooling invece di eseguire una nuova analisi dell’input. Index Spool è un operatore fisico. |
|
Index Update | 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. |
|
Inserted Scan | 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 catchall 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. | |
Key Lookup | L'operatore Key Lookup è una ricerca di segnalibri in una tabella con un indice cluster. Il riquadro Proprietà contiene il nome dell'indice cluster e la chiave di clustering usata per la ricerca della riga nell'indice cluster. 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.L’uso di un operatore Key Lookup in un piano di query indica che l'ottimizzazione delle prestazioni potrebbe produrre risultati migliori per la query. Le prestazioni della query, ad esempio, potrebbero essere migliorate con l'aggiunta di un indice di copertura. |
|
Keyset | L'operatore Keyset usa un cursore in grado di riconoscere gli aggiornamenti, ma non gli inserimenti, eseguiti da altri. | |
Language Element | L'icona catchall Language Element viene visualizzata quando la logica che produce showplan grafici 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 eseguito il rewind dell'operatore, ad esempio tramite un operatore Nested Loops, ma non è necessario eseguire nuovamente il rebind, 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 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 | 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 | Left Outer Join | 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 ogni riga del primo input senza 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. |
Log Row Scan | L'operatore Log Row Scan analizza il log delle transazioni. Log Row Scan è un operatore logico e fisico. |
|
Merge Interval | 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 negli operatori Constant Scan che costruiscono gli intervalli (rappresentati da colonne di una riga) uniti da questo operatore. Merge Interval è un operatore logico e fisico. |
|
Merge Join | L'operatore Merge Join esegue le operazioni logiche inner join, left outer join, left semi join, left anti semi join, right outer join, right semi join, right anti semi join e 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 altre informazioni, vedere Informazioni sui merge join. |
|
Nested Loops | L'operatore Nested Loops esegue le operazioni logiche inner join, left outer join, left semi join e left anti semi join. I join a cicli annidati eseguono una ricerca nella tabella interna per ogni riga della tabella esterna, usando generalmente un indice. In base ai costi previsti, Query Processor decide se ordinare l'input esterno per migliorare il luogo delle ricerche nell'indice rispetto all'input interno. Vengono restituite le righe che soddisfano il predicato (facoltativo) nel riquadro Proprietà, in base all'operazione logica eseguita. Quando l’attributo OPTIMIZED è impostato su True , viene usato Nested Loops ottimizzato (o l’ordinamento batch).Nested Loops è un operatore fisico. Per altre informazioni, vedere Informazioni sui join a cicli annidati. |
|
None | Online Index Insert | 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 distribute streams, gather streams e repartition streams. 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. |
Parameter Table Scan | L'operatore Parameter Table Scan analizza una tabella che funge da parametro nella query corrente. Generalmente, si usa per query INSERT in una stored procedure.Parameter Table Scan è un operatore logico e fisico. |
|
None | Partial Aggregate | L'operatorePartial Aggregate è usato in 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. |
Population Query | All'apertura di un cursore, l'operatore Population Query popola la tabella di lavoro di un cursore quando il cursore è aperto. | |
Refresh Query | L'operatore Refresh Query recupera i dati correnti per le righe nel buffer di recupero. | |
Remote Delete | L'operatore Remote Delete elimina le righe di input da un oggetto remoto. Remote Delete è un operatore logico e fisico. |
|
Remote Index Scan | L’operatore Remote Index Scan analizza l'indice remoto specificato nel riquadro Proprietà. Remote Insert Scan è un operatore logico e fisico. |
|
Remote Index Seek | 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 Insert Seek è un operatore logico fisico. |
|
Remote Insert | L'operatore Remote Insert inserisce le righe di input in un oggetto remoto. Remote Insert è un operatore logico e fisico. |
|
Remote Query | 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. |
|
Remote Scan | 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. |
|
Remote Update | L'operatore Remote Update aggiorna le righe di input in un oggetto remoto. Remote Update è un operatore logico e fisico. |
|
Repartition Streams | 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 utilizza un filtro bitmap, il numero di righe nel flusso di output è 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. |
|
RID Lookup | 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 NESTED LOOP JOIN .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) senza 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 | Right Outer Join | 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 ogni riga del secondo input senza righe corrispondenti nel primo input con join NULL . Se non esiste alcun predicato di join nel riquadro Proprietà, ogni riga è una riga corrispondente.Right Outer Join è un operatore logico. |
None | Right Semi Join | 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. |
Row Count 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 left semi join e il predicato di join è relativo all'input interno, è possibile che nella parte superiore dell'input interno dell'operatore Nested Loops venga inserito uno spooler di conteggio righe. In tal modo, l'operatore Nested Loops può determinare il numero righe di output indicate dallo spooler di conteggio righe (poiché i dati effettivi dal lato interno non sono necessari) e determinare 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 regione possono essere eseguiti mediante thread paralleli. Le regioni in sé devono essere eseguite in modalità 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’operatore, quindi, restituisce un segmento alla volta. Segment è un operatore fisico e logico. |
|
Sequence Project | L'operatore Sequence Project consente di aggiungere colonne per eseguire calcoli in un set ordinato. L'operatore divide il set di input in segmenti in base al valore di una o più colonne. L’operatore, quindi, restituisce un segmento alla volta. Queste colonne vengono visualizzate come argomenti nell'operatore Sequence Project. Sequence Project è un operatore logico e fisico. |
|
Sequenza | L'operatore Sequence indirizza i piani di aggiornamento estesi. A livello funzionale, esegue ogni input in sequenza (dall'alto verso il basso). Generalmente, ogni input è un aggiornamento di un oggetto differente. Restituisce solo le righe provenienti dall'ultimo input (inferiore). Sequence è un operatore logico e fisico. |
|
Snapshot | L'operatore Snapshot crea un cursore che non visualizza modifiche apportate da altri. | |
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. |
|
Split | 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. | |
Stream Aggregate | 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. L'output di questo operatore può essere usato come riferimento da operatori successivi nella query e/o restituito al client. 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. In base al valore restituito dall'espressione (compreso tra 0 e n-1), l'operatore Switch copia il flusso di input appropriato nel flusso di output. Uno degli usi di Switch consiste nell'implementazione di piani di query con cursori fast forward e determinati operatori, ad esempio l'operatore TOP. Switch è un operatore logico e fisico. |
|
Table Delete | L'operatore Table Delete elimina righe dalla tabella specificata nel riquadro Proprietà del piano di esecuzione query. Table Spool è un operatore fisico. |
|
Table Insert | 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 include disponibili figli per i valori Insert, la riga inserita verrà acquisita dall'operatore Insert stesso. Table Insert è un operatore fisico. |
|
Table Merge | 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. |
|
Table Scan | 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. |
|
Table Spool | 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 viene eseguito il rewind dell'operatore, ad esempio tramite un operatore Nested Loops, ma non è necessario eseguire nuovamente il rebind, vengono usati i dati di spooling invece di eseguire una nuova analisi dell’input. Table Spool è un operatore fisico. |
|
Table Update | 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.Table Spool è un operatore fisico. |
|
Table-valued Function | 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. |
|
Top | 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 consente di applicare limiti di conteggio 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 consente di serializzare gli input del set di righe relazionale nella rappresentazione XML in una singola colonna BLOB in una singola di output. È un operatore di aggregazione XML sensibile all'ordinamento. - L'operatore esteso (UDX) XML SERIALIZER è un operatore di aggregazione XML sensibile all'ordinamento. 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 particolare tipo di XML SERIALIZER che consente l'elaborazione delle righe di input che rappresentano frammenti XML da inserire nell'estensione di modifica dati Insert XQuery. - L'operatore esteso (UDX) XQUERY STRING valuta il valore stringa XQuery delle righe di input che rappresentano nodi XML. È un operatore di aggregazione di stringa sensibile all'ordinamento. 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 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 fn:data() XQuery su un input che rappresenta nodi XML. È un operatore di aggregazione di stringa sensibile all'ordinamento. Restituisce come output una sola riga con colonne che rappresentano lo scalare XQuery contenente il risultato di fn:data() .- L’operatore esteso XQUERY CONTAINS valuta la funzione fn:contains() XQuery su un input che rappresenta nodi XML. È un operatore di aggregazione di stringa sensibile all'ordinamento. Restituisce come output una sola riga con colonne che rappresentano lo scalare XQuery contenente il risultato di fn:contains() .L'operatore esteso UPDATE XML NODE aggiorna il nodo XML nell'estensione di modifica dati di sostituzione XQuery nel metodo modify() sul 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 o Clustered Index Update. |
|
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.Window Spool è un operatore logico e fisico. |
Nota
Nella documentazione di SQL Server viene usato in modo generico il termine albero B in riferimento agli indici. Negli indici rowstore, SQL Server implementa un albero B+. Ciò non si applica a indici columnstore o ad archivi dati in memoria. Per altre informazioni, vedere Architettura e guida per la progettazione degli indici di SQL Server e Azure SQL.