Condividi tramite


Panoramica del piano di esecuzione

Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure

Per poter eseguire le query, il motore di database SQL Server deve analizzare l'istruzione per determinare il modo più efficiente di accedere ai dati necessari e processarli. Questa analisi viene gestita da un componente denominato Query Optimizer. I dati di input per Query Optimizer sono costituiti dalla query, dallo schema del database (definizioni di tabella e indice) e dalle statistiche del database. Query Optimizer compila uno o più piani di esecuzione di query, a volte definiti piani di query o piani di esecuzione. Query Optimizer sceglie un piano di query usando un set di euristiche per bilanciare il tempo di compilazione e pianificare l'ottimalità per trovare un piano di query valido.

Suggerimento

Per altre informazioni sull'elaborazione delle query e sui piani di esecuzione delle query, vedere le sezioni Ottimizzazione delle istruzioni SELECT e Memorizzazione nella cache e riutilizzo del piano di esecuzione della Guida sull'architettura di elaborazione delle query.

Per informazioni sulla visualizzazione dei piani di esecuzione in SQL Server Management Studio e Azure Data Studio, vedere Visualizzare e salvare i piani di esecuzione.

Il piano di esecuzione di una query è costituito dalla definizione di:

  • La sequenza di accesso alle tabelle di origine.

    In genere il server di database può utilizzare molte sequenze diverse per accedere alle tabelle di base e quindi compilare il set di risultati. Ad esempio, se un'istruzione SELECT fa riferimento a tre tabelle, il server di database può accedere innanzitutto a TableA, usare i dati di TableA per estrarre le righe corrispondenti da TableB, quindi usare i dati di TableB per estrarre i dati da TableC. Di seguito vengono indicate le altre sequenze di accesso alle tabelle utilizzabili dal server di database:
    TableC, TableB, TableAo
    TableB, TableA, TableCo
    TableB, TableC, TableAo
    TableC, TableA, TableB

  • I metodi usati per estrarre i dati da ogni tabella.

    Per accedere ai dati di ogni tabella sono in genere disponibili metodi diversi. Se sono necessarie solo alcune righe con valori di chiave specifici, il server di database può utilizzare un indice. Se sono necessarie tutte le righe della tabella, il server di database può ignorare gli indici ed eseguire un'analisi di tabella. Se sono necessarie tutte le righe di una tabella, ma l'indice contiene colonne chiave incluse in una clausola ORDER BY, è consigliabile eseguire l'analisi dell'indice anziché della tabella per evitare che il set di risultati venga salvato separatamente. Se una tabella è di dimensioni ridotte, l'analisi della tabella potrebbe rappresentare il metodo più efficiente per quasi tutti gli accessi alla tabella.

  • I metodi usati per eseguire i calcoli e i modi usati per filtrare, aggregare e ordinare i dati da ogni tabella.

    Se si accede ai dati dalle tabelle, è possibile usare metodi diversi per eseguire i calcoli sui dati, ad esempio il calcolo dei valori scalari, per aggregare e ordinare i dati come definito nel testo della query, ad esempio quando si usa una clausola GROUP BY o ORDER BY, e per filtrare i dati, ad esempio quando si usa una clausola WHERE o HAVING.