Guida di riferimento agli operatori logici e fisici
Gli operatori descrivono la modalità di esecuzione di una query o di un'istruzione del linguaggio di manipolazione dei dati (DML, Data Manipulation Language) in SQL Server. In Query Optimizer gli operatori consentono di definire 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.
Gli operatori sono suddivisi in operatori logici e fisici. Gli operatori logici descrivono un'operazione di elaborazione di query relazionale a livello concettuale. Gli operatori fisici implementano l'operazione definita da un operatore logico tramite un metodo o algoritmo concreto. Ad esempio, "join" è un'operazione logica mentre "nested loops join" è un operatore fisico.
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 eseguono operazioni di tipo diverso: l'operatore Aggregate calcola il valore di un'espressione che include MIN, MAX, SUM, COUNT o AVG, mentre l'operatore Merge Join esegue diversi tipi di operazioni di join.Dopo essere stati inizializzati, gli operatori fisici raccolgono dati e quindi vengono chiusi. Un operatore fisico risponde alle tre chiamate di metodo seguenti:
Init(): con la chiamata del metodo Init() un operatore fisico si autonoinizializza e imposta le strutture di dati necessarie. Sebbene l'operatore fisico possa ricevere molte chiamate Init(), in genere ne riceve una sola.
GetNext(): con la chiamata del metodo GetNext() un operatore fisico recupera la prima riga di dati oppure la successiva. L'operatore fisico può ricevere più chiamate GetNext() oppure nessuna.
Close(): con la chiamata del metodo Close() un operatore fisico esegue alcune operazioni di eliminazione e viene quindi chiuso automaticamente. Un operatore fisico riceve una sola chiamata del metodo Close().
Il metodo GetNext() restituisce una riga di dati e il numero di chiamate ricevute viene visualizzato come ActualRows nell'output Showplan generato utilizzando SET STATISTICS PROFILE ON o SET STATISTICS XML ON. Per ulteriori 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 Showplan fanno riferimento al numero di chiamate al metodo Init(). A meno che un operatore non sia nel lato interno di un join ciclico, ActualRebinds è uguale a uno e ActualRewinds è uguale a zero. Se un operatore si trova nel lato interno di un join ciclico, la somma del numero delle associazioni e dei ripristini dovrebbe essere pari al numero delle 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 ripristino significa che nessuno dei parametri correlati è stato modificato e che è possibile riutilizzare il set di risultati interno precedente.
ActualRebinds e ActualRewinds sono inclusi nell'output Showplan XML generato utilizzando SET STATISTICS XML ON. Vengono popolati esclusivamente per gli operatori Nonclustered Index Spool, Remote Query, Row Count Spool, Sort, Table Spool e Table-valued Function. Anche ActualRebinds e ActualRewinds possono essere popolati per gli operatori Assert e Filter quando l'attributo StartupExpression è impostato su TRUE.
Quando ActualRebinds e ActualRewinds sono inclusi in uno Showplan XML, sono confrontabili con EstimateRebinds e EstimateRewinds. Quando non sono presenti, il numero di righe stimato (EstimateRows) è confrontabile con il numero effettivo di righe (ActualRows). Si noti che nell'output Showplan grafico effettivo è visualizzato zero per le riassociazioni e i ripristini effettivi quando non presenti. Per ulteriori informazioni sugli Showplan grafici, vedere Visualizzazione dei piani di esecuzione grafici (SQL Server Management Studio).
Un contatore correlato, ActualEndOfScans, è disponibile solo quando l'output Showplan viene generato utilizzando SET STATISTICS XML ON. 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 riassociazioni e ripristini, il numero delle scansioni terminate può essere maggiore di uno se l'operatore si trova nel lato interno di un join ciclico. Il numero di scansioni terminate dovrebbe essere minore o uguale alla somma del numero di riassociazioni e ripristini.
Gli operatori fisici corrispondono ad algoritmi di esecuzione. Sono esempi di operatori fisici index scan/seek, nested loop join, merge join, hash join/aggregation, stream aggregation. Gli operatori fisici possono influire sulle prestazioni. In ogni passaggio dell'esecuzione di una query o di un'istruzione DML infatti viene utilizzato un operatore fisico.
Mapping di operatori logici e fisici
In Query Optimizer viene creato un piano di query che consiste in un albero di operatori logici. Dopo la creazione del piano, viene scelto l'operatore fisico più efficiente per ogni operatore logico. L'operatore fisico che implementerà un operatore logico viene individuato in base al costo.
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.
Contenuto della sezione
In questa sezione vengono illustrati gli operatori fisici seguenti:
|