UPDATE STATISTICS (Transact-SQL)UPDATE STATISTICS (Transact-SQL)

QUESTO ARGOMENTO SI APPLICA A: SìSQL Server (a partire da 2008)SìDatabase SQL di AzureSìAzure SQL Data Warehouse Sì Parallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Aggiorna le statistiche di ottimizzazione query in una tabella o una vista indicizzata.Updates query optimization statistics on a table or indexed view. 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.By default, the query optimizer already updates statistics as necessary to improve the query plan; in some cases you can improve query performance by using UPDATE STATISTICS or the stored procedure sp_updatestats to update statistics more frequently than the default updates.

Sebbene consenta di garantire che le query vengano compilate con statistiche aggiornate,Updating statistics ensures that queries compile with up-to-date statistics. l'aggiornamento delle statistiche causa la ricompilazione delle query.However, updating statistics causes queries to recompile. 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.We recommend not updating statistics too frequently because there is a performance tradeoff between improving query plans and the time it takes to recompile queries. Tale equilibrio dipende dall'applicazione in uso.The specific tradeoffs depend on your application. Per le operazioni UPDATE STATISTICS è possibile usare tempdb per ordinare l'esempio di righe per la compilazione di statistiche.UPDATE STATISTICS can use tempdb to sort the sample of rows for building statistics.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintassiSyntax

-- Syntax for SQL Server and Azure SQL Database  

UPDATE STATISTICS table_or_indexed_view_name   
    [   
        {   
            { index_or_statistics__name }  
          | ( { index_or_statistics_name } [ ,...n ] )   
                }  
    ]   
    [    WITH   
        [  
            FULLSCAN   
              [ [ , ] PERSIST_SAMPLE_PERCENT = { ON | OFF } ]    
            | SAMPLE number { PERCENT | ROWS }   
              [ [ , ] PERSIST_SAMPLE_PERCENT = { ON | OFF } ]    
            | RESAMPLE   
              [ ON PARTITIONS ( { <partition_number> | <range> } [, …n] ) ]  
            | <update_stats_stream_option> [ ,...n ]  
        ]   
        [ [ , ] [ ALL | COLUMNS | INDEX ]   
        [ [ , ] NORECOMPUTE ]   
        [ [ , ] INCREMENTAL = { ON | OFF } ] 
        [ [ , ] MAXDOP = max_degree_of_parallelism ] 
    ] ;  

<update_stats_stream_option> ::=  
    [ STATS_STREAM = stats_stream ]  
    [ ROWCOUNT = numeric_constant ]  
    [ PAGECOUNT = numeric_contant ]  
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  

UPDATE STATISTICS schema_name . ] table_name   
    [ ( { statistics_name | index_name } ) ]  
    [ WITH   
       {  
              FULLSCAN   
            | SAMPLE number PERCENT   
            | RESAMPLE   
        }  
    ]  
[;]  

ArgomentiArguments

table_or_indexed_view_nametable_or_indexed_view_name
Nome della tabella o della vista indicizzata che contiene l'oggetto statistico.Is the name of the table or indexed view that contains the statistics object.

index_or_statistics_nameindex_or_statistics_name
Nome dell'indice per cui aggiornare le statistiche o nome delle statistiche da aggiornare.Is the name of the index to update statistics on or name of the statistics to update. Se index_or_statistics_name non viene specificato, Query Optimizer aggiorna tutte le statistiche per la tabella o la vista indicizzata.If index_or_statistics_name is not specified, the query optimizer updates all statistics for the table or indexed view. 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.This includes statistics created using the CREATE STATISTICS statement, single-column statistics created when AUTO_CREATE_STATISTICS is on, and statistics created for indexes.

Per altre informazioni su AUTO_CREATE_STATISTICS, vedere Opzioni ALTER DATABASE SET (Transact-SQL).For more information about AUTO_CREATE_STATISTICS, see ALTER DATABASE SET Options (Transact-SQL). Per visualizzare tutti gli indici per una tabella o una vista, è possibile usare sp_helpindex.To view all indexes for a table or view, you can use sp_helpindex.

FULLSCANFULLSCAN
Consente di calcolare le statistiche analizzando tutte le righe nella tabella o nella vista indicizzata.Compute statistics by scanning all rows in the table or indexed view. FULLSCAN e SAMPLE 100 PERCENT generano gli stessi risultati.FULLSCAN and SAMPLE 100 PERCENT have the same results. Non è possibile utilizzare FULLSCAN con l'opzione SAMPLE.FULLSCAN cannot be used with the SAMPLE option.

SAMPLE number { PERCENT | ROWS }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.Specifies the approximate percentage or number of rows in the table or indexed view for the query optimizer to use when it updates statistics. 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.For PERCENT, number can be from 0 through 100 and for ROWS, number can be from 0 to the total number of rows. La percentuale effettiva o il numero di righe campionate da Query Optimizer potrebbero non corrispondere alla percentuale o al numero specificato.The actual percentage or number of rows the query optimizer samples might not match the percentage or number specified. Query Optimizer analizza ad esempio tutte le righe in una pagina di dati.For example, the query optimizer scans all rows on a data page.

SAMPLE è utile per i casi speciali in cui il piano di query, basato sul campionamento predefinito, non è ottimale.SAMPLE is useful for special cases in which the query plan, based on default sampling, is not optimal. 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à.In most situations, it is not necessary to specify SAMPLE because the query optimizer uses sampling and determines the statistically significant sample size by default, as required to create high-quality query plans.

A partire da SQL Server 2016 (13.x)SQL Server 2016 (13.x), il campionamento dei dati per la generazione di statistiche avviene in parallelo, usando il livello di compatibilità 130, per migliorare le prestazioni della raccolta delle statistiche.Starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x), sampling of data to build statistics is done in parallel, when using compatibility level 130, to improve the performance of statistics collection. Query optimizer userà le statistiche di esempio parallele, ogni volta che una dimensione di tabella supera una determinata soglia.The query optimizer will use parallel sample statistics, whenever a table size exceeds a certain threshold.

Questa opzione non può essere utilizzata quando viene specificata l'opzione FULLSCAN.SAMPLE cannot be used with the FULLSCAN option. Se non si specifica né SAMPLE né FULLSCAN, Query Optimizer utilizza i dati campionati e calcola le dimensioni del campione per impostazione predefinita.When neither SAMPLE nor FULLSCAN is specified, the query optimizer uses sampled data and computes the sample size by default.

Si sconsiglia di specificare 0 PERCENT o 0 ROWS.We recommend against specifying 0 PERCENT or 0 ROWS. Se si specifica 0 PERCENT o ROWS, l'oggetto statistiche viene aggiornato ma non conterrà i dati delle statistiche.When 0 PERCENT or ROWS is specified, the statistics object is updated but does not contain statistics data.

Per la maggior parte dei carichi di lavoro, non è necessaria un'analisi completa e il campionamento predefinito è adeguato.For most workloads, a full scan is not required, and default sampling is adequate.
Tuttavia, alcuni carichi di lavoro sensibili a distribuzioni dei dati con ampie variazioni potrebbero richiedere una dimensione maggiore di esempio, o anche un'analisi completa.However, certain workloads that are sensitive to widely varying data distributions may require an increased sample size, or even a full scan.
Per altre informazioni, vedere il blog di CSS SQL Escalation Services.For more information, see the CSS SQL Escalation Services blog.

RESAMPLERESAMPLE
Aggiorna ogni statistica utilizzando la frequenza di campionamento più recente.Update each statistic using its most recent sample rate.

L'utilizzo di RESAMPLE può comportare un'analisi di tabella completa.Using RESAMPLE can result in a full-table scan. Per le statistiche per gli indici viene ad esempio utilizzata un'analisi di tabella completa per la frequenza di campionamento.For example, statistics for indexes use a full-table scan for their sample rate. 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.When none of the sample options (SAMPLE, FULLSCAN, RESAMPLE) are specified, the query optimizer samples the data and computes the sample size by default.

PERSIST_SAMPLE_PERCENT = { ON | OFF }PERSIST_SAMPLE_PERCENT = { ON | OFF }
Se ON, le statistiche mantengono la percentuale di campionamento impostata per gli aggiornamenti successivi che non specificano in modo esplicito una percentuale di campionamento.When ON, the statistics will retain the set sampling percentage for subsequent updates that do not explicitly specify a sampling percentage. Se OFF, la percentuale di campionamento delle statistiche viene reimpostata sul campionamento predefinito per gli aggiornamenti successivi che non la specificano in modo esplicito.When OFF, statistics sampling percentage will get reset to default sampling in subsequent updates that do not explicitly specify a sampling percentage. Il valore predefinito è OFF.The default is OFF.

Nota

Se viene eseguita AUTO_UPDATE_STATISTICS, usa la percentuale di campionamento persistente, qualora disponibile, o la percentuale di campionamento predefinito se non disponibile.If AUTO_UPDATE_STATISTICS is executed, it uses the persisted sampling percentage if available, or use default sampling percentage if not. Il comportamento di RESAMPLE non è interessato da questa opzione.RESAMPLE behavior is not affected by this option.

Suggerimento

DBCC SHOW_STATISTICS e sys.dm_db_stats_properties espongono il valore di percentuale di campionamento persistente per la statistica selezionata.DBCC SHOW_STATISTICS and sys.dm_db_stats_properties expose the persisted sample percent value for the selected statistic.

Si applica a: da SQL Server 2016 (13.x)SQL Server 2016 (13.x) (a partire da SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP1 CU4) fino a SQL Server 2017SQL Server 2017 (a partire da SQL Server 2017 (14.x)SQL Server 2017 (14.x) CU1).Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) (starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP1 CU4) through SQL Server 2017SQL Server 2017 (starting with SQL Server 2017 (14.x)SQL Server 2017 (14.x) CU1).

ON PARTITIONS ( { <partition_number> | <range> } [, …n] ) ] Forza la rielaborazione delle statistiche a livello foglia che coprono le partizioni specificate nella clausola ON PARTITIONS e successivamente ne determina il merge per compilare le statistiche globali.ON PARTITIONS ( { <partition_number> | <range> } [, …n] ) ] Forces the leaf-level statistics covering the partitions specified in the ON PARTITIONS clause to be recomputed, and then merged to build the global statistics. L'opzione WITH RESAMPLE è necessaria in quanto non è possibile eseguire il merge di statistiche di partizioni compilate con frequenze di campionamento differenti.WITH RESAMPLE is required because partition statistics built with different sample rates cannot be merged together.

Si applica a: da SQL Server 2014 (12.x)SQL Server 2014 (12.x) a SQL Server 2017SQL Server 2017Applies to: SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017

ALL | COLUMNS | INDEXALL | COLUMNS | INDEX
Aggiornare tutte le statistiche esistenti, le statistiche create in una o più colonne o le statistiche create per gli indici.Update all existing statistics, statistics created on one or more columns, or statistics created for indexes. Se non si specifica nessuna delle opzioni, l'istruzione UPDATE STATISTICS aggiorna tutte le statistiche sulla tabella o sulla vista indicizzata.If none of the options are specified, the UPDATE STATISTICS statement updates all statistics on the table or indexed view.

NORECOMPUTENORECOMPUTE
Disabilitare l'opzione di aggiornamento automatico delle statistiche AUTO_UPDATE_STATISTICS per le statistiche specificate.Disable the automatic statistics update option, AUTO_UPDATE_STATISTICS, for the specified statistics. Se viene specificata questa opzione, Query Optimizer completa l'aggiornamento di queste statistiche e disabilita gli aggiornamenti futuri.If this option is specified, the query optimizer completes this statistics update and disables future updates.

Per riabilitare il comportamento dell'opzione AUTO_UPDATE_STATISTICS, rieseguire UPDATE STATISTICS senza l'opzione NORECOMPUTE oppure eseguire sp_autostats.To re-enable the AUTO_UPDATE_STATISTICS option behavior, run UPDATE STATISTICS again without the NORECOMPUTE option or run sp_autostats.

Avviso

L'utilizzo di questa opzione può produrre piani di query non ottimali.Using this option can produce suboptimal query plans. È consigliabile limitare l'utilizzo di questa opzione e riservarne l'applicazione a un amministratore del sistema qualificato.We recommend using this option sparingly, and then only by a qualified system administrator.

Per altre informazioni sull'opzione AUTO_STATISTICS_UPDATE, vedere Opzioni ALTER DATABASE SET (Transact-SQL).For more information about the AUTO_STATISTICS_UPDATE option, see ALTER DATABASE SET Options (Transact-SQL).

INCREMENTAL = { ON | OFF }INCREMENTAL = { ON | OFF }
Quando è impostata su ON, le statistiche vengono ricreate come statistiche per partizione.When ON, the statistics are recreated as per partition statistics. Quando è impostata su OFF, l'albero delle statistiche viene eliminato e le statistiche vengono rielaborate da SQL ServerSQL Server.When OFF, the statistics tree is dropped and SQL ServerSQL Server re-computes the statistics. Il valore predefinito è OFF.The default is OFF.

Se le statistiche per partizione non sono supportate, viene generato un errore.If per partition statistics are not supported an error is generated. Le statistiche incrementali non sono supportate per i seguenti tipi di statistiche:Incremental stats are not supported for following statistics types:

  • Statistiche create con indici che non hanno il partizionamento allineato con la tabella di base.Statistics created with indexes that are not partition-aligned with the base table.
  • Statistiche create per i database secondari leggibili Always On.Statistics created on Always On readable secondary databases.
  • Statistiche create per i database di sola lettura.Statistics created on read-only databases.
  • Statistiche create per gli indici filtrati.Statistics created on filtered indexes.
  • Statistiche create per le viste.Statistics created on views.
  • Statistiche create per le tabelle interne.Statistics created on internal tables.
  • Statistiche create con indici spaziali o indici XML.Statistics created with spatial indexes or XML indexes.

Si applica a: da SQL Server 2014 (12.x)SQL Server 2014 (12.x) a SQL Server 2017SQL Server 2017Applies to: SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017

MAXDOP = max_degree_of_parallelismMAXDOP = max_degree_of_parallelism
Si applica a: SQL ServerSQL Server (a partire da SQL Server 2017 (14.x)SQL Server 2017 (14.x) CU3).Applies to: SQL ServerSQL Server (Starting with SQL Server 2017 (14.x)SQL Server 2017 (14.x) CU3).

Esegue l'override dell'opzione di configurazione max degree of parallelism per la durata dell'operazione statistica.Overrides the max degree of parallelism configuration option for the duration of the statistic operation. Per altre informazioni, vedere Configurare l'opzione di configurazione del server max degree of parallelism.For more information, see Configure the max degree of parallelism Server Configuration Option. Utilizzare MAXDOP per limitare il numero di processori utilizzati durante l'esecuzione di un piano parallelo.Use MAXDOP to limit the number of processors used in a parallel plan execution. Il valore massimo è 64 processori.The maximum is 64 processors.

max_degree_of_parallelism può essere:max_degree_of_parallelism can be:

11
Disattiva la generazione di piani paralleli.Suppresses parallel plan generation.

>1>1
Consente di limitare al valore specificato, o a un valore più basso in base al carico di lavoro corrente del sistema, il numero massimo di processori usati in un'operazione parallela statistica.Restricts the maximum number of processors used in a parallel statistic operation to the specified number or fewer based on the current system workload.

0 (predefinito)0 (default)
Utilizza il numero effettivo di processori o un numero inferiore in base al carico di lavoro corrente del sistema.Uses the actual number of processors or fewer based on the current system workload.

<update_stats_stream_option> Identificato solo a scopo informativo.Identified for informational purposes only. Non supportato.Not supported. Non è garantita la compatibilità con le versioni future.Future compatibility is not guaranteed.<update_stats_stream_option> Identificato solo a scopo informativo.Identified for informational purposes only. Non supportato.Not supported. Non è garantita la compatibilità con le versioni future.Future compatibility is not guaranteed.

RemarksRemarks

Utilizzo di UPDATE STATISTICSWhen to Use UPDATE STATISTICS

Per altre informazioni sulle situazioni in cui usare UPDATE STATISTICS, vedere Statistiche.For more information about when to use UPDATE STATISTICS, see Statistics.

Limitazioni e restrizioniLimitations and Restrictions

  • L'aggiornamento delle statistiche non è supportato per le tabelle esterne.Updating statistics is not supported on external tables. Per aggiornare le statistiche in una tabella esterna, eliminare e ricreare le statistiche.To update statistics on an external table, drop and re-create the statistics.
  • L'opzione MAXDOP non è compatibile con le opzioni STATS_STREAM, ROWCOUNT e PAGECOUNT.The MAXDOP option is not compatible with STATS_STREAM, ROWCOUNT and PAGECOUNT options.

Aggiornamento di tutte le statistiche con sp_updatestatsUpdating All Statistics with sp_updatestats

Per informazioni sull'aggiornamento delle statistiche per tutte le tabelle interne e definite dall'utente nel database, vedere la stored procedure sp_updatestats (Transact-SQL).For information about how to update statistics for all user-defined and internal tables in the database, see the stored procedure sp_updatestats (Transact-SQL). Il comando riportato di seguito chiama ad esempio sp_updatestats per aggiornare tutte le statistiche per il database.For example, the following command calls sp_updatestats to update all statistics for the database.

EXEC sp_updatestats;  

Determinazione dell'ultimo aggiornamento delle statisticheDetermining the Last Statistics Update

Per determinare la data dell'ultimo aggiornamento delle statistiche, usare la funzione STATS_DATE .To determine when statistics were last updated, use the STATS_DATE function.

PDW / SQL Data WarehousePDW / SQL Data Warehouse

La sintassi seguente non è supportata da PDW / SQL Data WarehouseThe following syntax is not supported by PDW / SQL Data Warehouse

update statistics t1 (a,b);   
update statistics t1 (a) with sample 10 rows;  
update statistics t1 (a) with NORECOMPUTE;  
update statistics t1 (a) with INCREMENTAL=ON;  
update statistics t1 (a) with stats_stream = 0x01;  

AutorizzazioniPermissions

È richiesta l'autorizzazione ALTER per la tabella o la vista.Requires ALTER permission on the table or view.

EsempiExamples

A.A. Aggiornamento di tutte le statistiche di una tabellaUpdate all statistics on a table

In questo esempio vengono aggiornate le statistiche per tutti gli indici della tabella SalesOrderDetail.The following example updates the statistics for all indexes on the SalesOrderDetail table.

USE AdventureWorks2012;  
GO  
UPDATE STATISTICS Sales.SalesOrderDetail;  
GO  

B.B. Aggiornamento delle statistiche per un indiceUpdate the statistics for an index

In questo esempio vengono aggiornate le statistiche relative all'indice AK_SalesOrderDetail_rowguid della tabella SalesOrderDetail.The following example updates the statistics for the AK_SalesOrderDetail_rowguid index of the SalesOrderDetail table.

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

C.C. Aggiornamento delle statistiche tramite un campionamento al 50 percentoUpdate statistics by using 50 percent sampling

Nell'esempio seguente vengono create e quindi aggiornate le statistiche per le colonne Name e ProductNumber della tabella Product.The following example creates and then updates the statistics for the Name and ProductNumber columns in the Product table.

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.D. Aggiornamento delle statistiche tramite le opzioni FULLSCAN e NORECOMPUTEUpdate statistics by using FULLSCAN and 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.The following example updates the Products statistics in the Product table, forces a full scan of all rows in the Product table, and turns off automatic statistics for the Products statistics.

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

Esempi: Azure SQL Data WarehouseAzure SQL Data Warehouse e Parallel Data WarehouseParallel Data WarehouseExamples: Azure SQL Data WarehouseAzure SQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

E.E. Aggiornamento delle statistiche di una tabellaUpdate statistics on a table

In questo esempio vengono aggiornate le statistiche CustomerStats1 della tabella Customer.The following example updates the CustomerStats1 statistics on the Customer table.

UPDATE STATISTICS Customer ( CustomerStats1 );  

F.F. Aggiornare statistiche tramite un'analisi completaUpdate statistics by using a full scan

L'esempio seguente aggiorna le statistiche CustomerStats1 in base all'analisi di tutte le righe della tabella Customer.The following example updates the CustomerStats1 statistics, based on scanning all of the rows in the Customer table.

UPDATE STATISTICS Customer (CustomerStats1) WITH FULLSCAN;  

G.G. Aggiornamento di tutte le statistiche di una tabellaUpdate all statistics on a table

In questo esempio vengono aggiornate tutte le statistiche della tabella Customer.The following example updates all statistics on the Customer table.

UPDATE STATISTICS Customer;  

Vedere ancheSee Also

Statistiche Statistics
ALTER DATABASE (Transact-SQL) ALTER DATABASE (Transact-SQL)
CREATE STATISTICS (Transact-SQL) CREATE STATISTICS (Transact-SQL)
DBCC SHOW_STATISTICS (Transact-SQL) DBCC SHOW_STATISTICS (Transact-SQL)
DROP STATISTICS (Transact-SQL) DROP STATISTICS (Transact-SQL)
sp_autostats (Transact-SQL) sp_autostats (Transact-SQL)
sp_updatestats (Transact-SQL) sp_updatestats (Transact-SQL)
STATS_DATE (Transact-SQL)STATS_DATE (Transact-SQL)
sys.dm_db_stats_properties (Transact-SQL) sys.dm_db_stats_histogram (Transact-SQL)sys.dm_db_stats_properties (Transact-SQL) sys.dm_db_stats_histogram (Transact-SQL)