UPDATE STATISTICS (Transact-SQL)

Data aggiornamento: 12 dicembre 2006

Aggiorna le informazioni sulla distribuzione dei valori di chiave per uno o più gruppi o insiemi di statistiche nella tabella o vista indicizzata specificata. Per creare statistiche per le colonne, vedere CREATE STATISTICS (Transact-SQL).

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

UPDATE STATISTICS table | view 
    [ 
        { 
            { index | statistics_name }
          | ( { index |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 | view
    Nome della tabella o vista indicizzata per cui si desidera aggiornare le statistiche. I nomi di tabelle e viste devono essere conformi alle regole per gli identificatori. Per ulteriori informazioni, vedere Utilizzo degli identificatori come nomi di oggetti. Dal momento che i nomi di indice non sono univoci in ogni database, è necessario specificare table o view. Se lo si desidera, è possibile specificare il database, la tabella o lo schema della vista.
  • index
    Indice per il quale si desidera aggiornare le statistiche. I nomi degli indici devono essere conformi alle regole per gli identificatori. Se index viene omesso, vengono aggiornate tutte le statistiche di distribuzione nella tabella o vista indicizzata specificata, incluse le statistiche create mediante l'istruzione CREATE STATISTICS, le statistiche create automaticamente e quelle create come risultato della creazione di indici.

    Per visualizzare un report degli indici di un oggetto, eseguire sp_helpindex e specificare il nome della tabella o della vista.

  • statistics_name
    Nome del gruppo o insieme di statistiche che si desidera aggiornare. I nomi dei gruppi di statistiche devono essere conformi alle regole per gli identificatori. Per ulteriori informazioni sulla creazione dei gruppi di statistiche, vedere CREATE STATISTICS (Transact-SQL).
  • FULLSCAN
    Specifica che per la creazione delle statistiche devono essere lette tutte le righe di table o view. L'opzione FULLSCAN funziona in modo analogo a SAMPLE 100 PERCENT. Non è possibile utilizzare FULLSCAN con l'opzione SAMPLE.
  • SAMPLE number { PERCENT | ROWS }
    Specifica la percentuale della tabella o vista indicizzata oppure il numero di righe di campionamento per la creazione delle statistiche di tabelle o viste di grandi dimensioni. number deve essere un valore integer, sia per PERCENT che per ROWS. Per utilizzare il campionamento predefinito per tabelle o viste di grandi dimensioni, utilizzare SAMPLE number con PERCENT o ROWS. Motore di database di SQL Server 2005 verifica che venga campionato un numero di valori sufficiente a garantire statistiche significative. Se PERCENT, ROWS o number restituisce un numero di righe troppo limitato, il campionamento viene corretto automaticamente da Motore di database in base al numero di righe della tabella o vista. Vengono campionate almeno 1.000 pagine di dati. Se PERCENT, ROWS o number crea più valori di quelli necessari per un campione significativo, Motore di database cerca di rispettare la quantità richiesta. Dal momento che, tuttavia, i campioni vengono creati sottoponendo a scansione tutte le pagine di dati, le dimensioni effettive del campione potrebbero non corrispondere esattamente alla quantità specificata. Se si specifica 0 PERCENT o ROWS, il risultato è un gruppo di statistiche vuoto.

    [!NOTA] Il funzionamento predefinito prevede l'esecuzione di una scansione di campionamento sulla tabella o vista indicizzata di destinazione. Il Motore di database calcola automaticamente le dimensioni del campione.

  • RESAMPLE
    Specifica che i dati statistici verranno restituiti tramite un rapporto di campionamento ereditato per tutte le statistiche esistenti che includono indici. Se il rapporto di campionamento restituisce un numero di righe troppo limitato, il campionamento viene corretto automaticamente da Motore di database in base al numero di righe della tabella o vista.
  • ALL | COLUMNS | INDEX
    Specifica se l'istruzione UPDATE STATISTICS interessa le statistiche di colonna, di indice o tutte quelle esistenti. Se non viene specificata alcuna opzione, l'istruzione UPDATE STATISTICS viene applicata a tutte le statistiche. È possibile specificare una sola opzione (ALL, COLUMNS o INDEX) per l'istruzione UPDATE STATISTICS.
  • NORECOMPUTE
    Specifica che le statistiche obsolete non vengono ricalcolate automaticamente. Le statistiche diventano obsolete a seconda del numero di operazioni INSERT, UPDATE e DELETE eseguite nelle colonne indicizzate. Quando questa opzione è specificata, la ricostruzione automatica delle statistiche viene disattivata dal Motore di database. Per riattivare questa funzionalità, rieseguire UPDATE STATISTICS senza l'opzione NORECOMPUTE oppure eseguire sp_autostats.

    ms187348.note(it-it,SQL.90).gifImportante:
    In seguito alla disattivazione del ricalcolo automatico delle statistiche, è possibile che in Query Optimizer venga impedita l'attivazione dei piani di esecuzione ottimali per le query sulla tabella specificata.
  • <update_stats_stream_option>
    Identificazione a solo scopo informativo. Supporto non fornito. Non è garantita la compatibilità con le versioni future.

Osservazioni

In ogni indice Motore di database mantiene le statistiche sulla distribuzione dei valori di chiave, utilizzate per determinare quali indici utilizzare nell'elaborazione delle query. Gli utenti possono creare statistiche su colonne non indicizzate tramite l'istruzione CREATE STATISTICS. L'ottimizzazione delle query dipende dalla precisione dei passaggi di distribuzione:

  • Se i valori di chiave nell'indice sono variati in modo significativo, rieseguire UPDATE STATISTICS nell'indice.
  • Se in una colonna indicizzata sono stati aggiunti, modificati o rimossi molti dati, ovvero se la distribuzione dei valori di chiave è cambiata, oppure la tabella è stata troncata tramite l'istruzione TRUNCATE TABLE e quindi ripopolata, eseguire UPDATE STATISTICS.

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

UPDATE STATISTICS WITH RESAMPLE aggiorna tutte le statistiche di una tabella in base alla frequenza di campionamento corrente. Questo significa che per le statistiche legate agli indici, che vengono create con la scansione completa al momento della creazione dell'indice, è necessario riaggiornare l'intera scansione di tabella. Questa operazione potrebbe richiedere molto tempo, in particolare se interessa tabelle partizionate di grandi dimensioni con molti indici. L'aggiornamento di ogni statistica richiede la lettura di moltissimi dati. Per evitare questo problema, è consigliabile utilizzare sp_updatestats (Transact-SQL). Questa stored procedure aggiorna le statistiche solo quando vengono richieste.

Nelle tabelle che includono colonne calcolate è possibile creare o aggiornare le statistiche solo se su tali colonne è possibile creare un indice. Per ulteriori informazioni sulle limitazioni e sui requisiti relativi alla creazione di indici in colonne calcolate, vedere CREATE INDEX (Transact-SQL).

Se si disattiva il ricalcolo automatico delle statistiche, è necessario aggiornare manualmente le informazioni statistiche.

[!NOTA] L'istruzione UPDATE STATISTICS riattiva l'aggiornamento automatico delle statistiche nella tabella o vista di destinazione, a meno che non si specifichi la clausola NORECOMPUTE.

Autorizzazioni

Richiede l'autorizzazione ALTER per la tabella o la vista.

Esempi

A. Aggiornamento di tutte le statistiche per una sola tabella

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

USE AdventureWorks;
GO
UPDATE STATISTICS Sales.SalesOrderDetail;
GO

B. Aggiornamento della statistiche relative a un solo indice

In questo esempio vengono aggiornate solo le informazioni di distribuzione relative all'indice AK_SalesOrderDetail_rowguid della tabella SalesOrderDetail.

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

C. Aggiornamento delle statistiche per gruppi di statistiche specifici tramite un campionamento del 50%

Nell'esempio seguente viene creato e quindi aggiornato il gruppo di 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 per gruppi di statistiche specifici tramite FULLSCAN e NORECOMPUTE

Nell'esempio seguente viene aggiornato il gruppo o insieme di 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 per il gruppo di statistiche.

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

Vedere anche

Riferimento

ALTER DATABASE (Transact-SQL)
CREATE INDEX (Transact-SQL)
CREATE STATISTICS (Transact-SQL)
sys.stats (Transact-SQL)
sys.stats_columns (Transact-SQL)
Cursori (Transact-SQL)
DBCC SHOW_STATISTICS (Transact-SQL)
DROP STATISTICS (Transact-SQL)
EXECUTE (Transact-SQL)
EVENTDATA (Transact-SQL)
sp_autostats (Transact-SQL)
sp_createstats (Transact-SQL)
sp_helpindex (Transact-SQL)
sp_updatestats (Transact-SQL)
STATS_DATE (Transact-SQL)

Altre risorse

Funzioni (Motore di database)

Guida in linea e informazioni

Assistenza su SQL Server 2005

Cronologia modifiche

Versione Cronologia

12 dicembre 2006

Contenuto modificato:
  • Rimozione della frase "L'istruzione UPDATE STATISTICS non è consentita in una transazione esplicita o implicita" dalla sezione Osservazioni. Tale restrizione non è applicabile a SQL Server 2005.