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. L'operazione UPDATE STATISTICS può utilizzare tempdb per ordinare il campione di righe per la compilazione di statistiche.
Convenzioni 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 un'analisi di tabella completa. Per le statistiche per gli indici viene ad esempio utilizzata un'analisi 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.
Attenzione 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).
<update_stats_stream_option>
Identificato solo a scopo informativo. Non supportato. Non è garantita la compatibilità con le versioni future.
Osservazioni
Quando utilizzare UPDATE STATISTICS
Per ulteriori informazioni sulle situazioni in cui utilizzare UPDATE STATISTICS, vedere Statistiche.
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 seguente, ad esempio, chiama 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 AdventureWorks2012;
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 AdventureWorks2012;
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 AdventureWorks2012;
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 un'analisi completa di tutte le righe della tabella Product, quindi viene disattivato l'aggiornamento automatico delle statistiche di Products.
USE AdventureWorks2012;
GO
UPDATE STATISTICS Production.Product(Products)
WITH FULLSCAN, NORECOMPUTE;
GO
Vedere anche
Riferimento
CREATE STATISTICS (Transact-SQL)
DBCC SHOW_STATISTICS (Transact-SQL)
DROP STATISTICS (Transact-SQL)