UPDATE STATISTICS (Transact-SQL)

Aggiorna le statistiche di ottimizzazione delle query in una tabella o una vista indicizzata. Per impostazione predefinita, Query Optimizer aggiorna già le statistiche come necessario per migliorare il piano di query. In alcuni casi è possibile migliorare le prestazioni di esecuzione delle query tramite UPDATE STATISTICS o la stored procedure sp_updatestats per aggiornare le statistiche più di frequente rispetto agli aggiornamenti predefiniti.

Sebbene consenta di garantire che le query vengano compilate con statistiche aggiornate, l'aggiornamento delle statistiche causa la ricompilazione delle query. Si consiglia di non aggiornare le statistiche troppo frequentemente perché è necessario mantenere un equilibrio a livello di prestazioni tra la necessità di migliorare i piani di query e il tempo necessario per la ricompilazione delle query. Tale equilibrio dipende dall'applicazione in uso.

Per ulteriori informazioni sulle statistiche, incluso quando utilizzare UPDATE STATISTICS, vedere Utilizzo di statistiche per migliorare le prestazioni di esecuzione delle query.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

UPDATE STATISTICS table_or_indexed_view_name 
    [ 
        { 
            { index_or_statistics__name }
          | ( { index_or_statistics_name } [ ,...n ] ) 
                }
    ] 
    [    WITH 
        [ 
            [ FULLSCAN ] 
            | SAMPLE number { PERCENT | ROWS } ] 
            | RESAMPLE 
            | <update_stats_stream_option> [ ,...n ]
        ] 
        [ [ , ] [ ALL | COLUMNS | INDEX ] 
        [ [ , ] NORECOMPUTE ] 
    ] ;

<update_stats_stream_option> ::=
    [ STATS_STREAM = stats_stream ]
    [ ROWCOUNT = numeric_constant ]
    [ PAGECOUNT = numeric contant ]

Argomenti

  • table_or_indexed_view_name
    Nome della tabella o della vista indicizzata per cui aggiornare le statistiche.

  • index_or_statistics_name
    Nome dell'indice per cui aggiornare le statistiche o nome delle statistiche da aggiornare. Se index_or_statistics_name non viene specificato, Query Optimizer aggiorna tutte le statistiche per la tabella o la vista indicizzata, Sono incluse le statistiche create tramite l'istruzione CREATE STATISTICS, le statistiche di colonna singola create quando l'opzione AUTO_CREATE_STATISTICS è ON e quelle create per gli indici.

    Per ulteriori informazioni su AUTO_CREATE_STATISTICS, vedere Opzioni ALTER DATABASE SET (Transact-SQL). Per visualizzare tutti gli indici per una tabella o una vista, è possibile utilizzare sp_helpindex.

  • FULLSCAN
    Consente di calcolare le statistiche analizzando tutte le righe nella tabella o nella vista indicizzata. FULLSCAN e SAMPLE 100 PERCENT generano gli stessi risultati. Non è possibile utilizzare FULLSCAN con l'opzione SAMPLE.

  • SAMPLE number { PERCENT | ROWS }
    Percentuale approssimativa o numero di righe presenti nella tabella o nella vista indicizzata utilizzate da Query Optimizer durante l'aggiornamento delle statistiche. Per PERCENT number può essere compreso tra 0 e 100, mentre per ROWS number può essere compreso tra 0 e il numero totale di righe. La percentuale effettiva o il numero di righe campionate da Query Optimizer potrebbero non corrispondere alla percentuale o al numero specificato. Query Optimizer analizza ad esempio tutte le righe in una pagina di dati.

    SAMPLE è utile per i casi speciali in cui il piano di query, basato sul campionamento predefinito, non è ottimale. Nella maggior parte delle situazioni, non è necessario specificare SAMPLE perché Query Optimizer utilizza il campionamento e determina le dimensioni del campione statisticamente significative per impostazione predefinita, come richiesto per creare piani di query di alta qualità.

    Questa opzione non può essere utilizzata quando viene specificata l'opzione FULLSCAN. Se non si specifica né SAMPLE né FULLSCAN, Query Optimizer utilizza i dati campionati e calcola le dimensioni del campione per impostazione predefinita.

    Si sconsiglia di specificare 0 PERCENT o 0 ROWS. Se si specifica 0 PERCENT o ROWS, l'oggetto statistiche viene aggiornato ma non conterrà i dati delle statistiche.

  • RESAMPLE
    Aggiorna ogni statistica utilizzando la frequenza di campionamento più recente.

    L'utilizzo di RESAMPLE può comportare una scansione di tabella completa. Per le statistiche per gli indici viene ad esempio utilizzata una scansione di tabella completa per la frequenza di campionamento. Se non si specifica nessuna delle opzioni di campionamento, ovvero SAMPLE, FULLSCAN o RESAMPLE, Query Optimizer campiona i dati e calcola le dimensioni del campione per impostazione predefinita.

  • ALL | COLUMNS | INDEX
    Aggiornare tutte le statistiche esistenti, le statistiche create in una o più colonne o le statistiche create per gli indici. Se non si specifica nessuna delle opzioni, l'istruzione UPDATE STATISTICS aggiorna tutte le statistiche sulla tabella o sulla vista indicizzata.

  • NORECOMPUTE
    Disabilitare l'opzione di aggiornamento automatico delle statistiche AUTO_UPDATE_STATISTICS per le statistiche specificate. Se viene specificata questa opzione, Query Optimizer completa l'aggiornamento di queste statistiche e disabilita gli aggiornamenti futuri.

    Per riabilitare il comportamento dell'opzione AUTO_UPDATE_STATISTICS, rieseguire UPDATE STATISTICS senza l'opzione NORECOMPUTE oppure eseguire sp_autostats.

    Nota di attenzioneAttenzione

    L'utilizzo di questa opzione può produrre piani di query non ottimali. È consigliabile limitare l'utilizzo di questa opzione e riservarne l'applicazione a un amministratore del sistema qualificato.

    Per ulteriori informazioni sull'opzione AUTO_UPDATE_STATISTICS, vedere Opzioni ALTER DATABASE SET (Transact-SQL). Per ulteriori informazioni sulla disabilitazione e riabilitazione degli aggiornamenti delle statistiche, vedere Utilizzo di statistiche per migliorare le prestazioni di esecuzione delle query.

  • <update_stats_stream_option>
    Identificato solo a scopo informativo. Non supportato. Non è garantita la compatibilità con le versioni future.

Osservazioni

Utilizzo di UPDATE STATISTICS

Per ulteriori informazioni sulle situazioni in cui utilizzare UPDATE STATISTICS, vedere Utilizzo di statistiche per migliorare le prestazioni di esecuzione delle query.

Aggiornamento di tutte le statistiche con sp_updatestats

Per informazioni sull'aggiornamento di statistiche per tutte le tabelle definite dall'utente e interne nel database, vedere la stored procedure sp_updatestats (Transact-SQL). Il comando riportato di seguito chiama ad esempio sp_updatestats per aggiornare tutte le statistiche per il database.

EXEC sp_updatestats

Determinazione dell'ultimo aggiornamento delle statistiche

Per determinare la data dell'ultimo aggiornamento delle statistiche, utilizzare la funzione STATS_DATE.

Autorizzazioni

È richiesta l'autorizzazione ALTER per la tabella o la vista.

Esempi

A. Aggiornamento di tutte le statistiche di una tabella

In questo esempio vengono aggiornate le statistiche per tutti gli indici della tabella SalesOrderDetail.

USE AdventureWorks;
GO
UPDATE STATISTICS Sales.SalesOrderDetail;
GO

B. Aggiornamento delle statistiche per un indice

In questo esempio vengono aggiornate le statistiche relative all'indice AK_SalesOrderDetail_rowguid della tabella SalesOrderDetail.

USE AdventureWorks;
GO
UPDATE STATISTICS Sales.SalesOrderDetail AK_SalesOrderDetail_rowguid;
GO

C. Aggiornamento delle statistiche tramite un campionamento al 50 percento

Nell'esempio seguente vengono create e quindi aggiornate le statistiche per le colonne Name e ProductNumber della tabella Product.

USE AdventureWorks;
GO
CREATE STATISTICS Products
    ON Production.Product ([Name], ProductNumber)
    WITH SAMPLE 50 PERCENT
-- Time passes. The UPDATE STATISTICS statement is then executed.
UPDATE STATISTICS Production.Product(Products) 
    WITH SAMPLE 50 PERCENT;

D. Aggiornamento delle statistiche tramite le opzioni FULLSCAN e NORECOMPUTE

Nell'esempio seguente vengono aggiornate le statistiche Products della tabella Product, viene eseguita una scansione completa di tutte le righe della tabella Product, quindi viene disattivato l'aggiornamento automatico delle statistiche di Products.

USE AdventureWorks;
GO
UPDATE STATISTICS Production.Product(Products)
    WITH FULLSCAN, NORECOMPUTE;
GO

Cronologia modifiche

Aggiornamento del contenuto

Revisioni in tutto il documento per migliorare l'accuratezza.

L'argomento contiene riferimenti al nuovo contenuto sulle statistiche nell'argomento Utilizzo di statistiche per migliorare le prestazioni di esecuzione delle query.