UPDATE STATISTICS (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsPDW (Analytics Platform System)Ponto de extremidade de SQL no Microsoft FabricWarehouse no Microsoft Fabric

Atualiza estatísticas de otimização de consulta em uma tabela ou exibição indexada. Por padrão, o otimizador de consulta já atualiza estatísticas conforme necessário para melhorar o plano de consulta, em alguns casos, é possível melhorar o desempenho de consulta usando UPDATE STATISTICS ou o procedimento armazenado sp_updatestats para atualizar estatísticas com mais frequência do que as atualizações padrão.

A atualização de estatísticas assegura que as consultas sejam compiladas com estatísticas atualizadas. A atualização de estatísticas por meio de qualquer processo pode fazer com que os planos de consulta sejam recompilados automaticamente. É recomendável não atualizar estatísticas com muita frequência porque existem vantagens e desvantagens de desempenho entre o aprimoramento dos planos de consulta e o tempo necessário para recompilar consultas. As compensações específicas dependem do seu aplicativo. UPDATE STATISTICS pode usar tempdb para classificar o exemplo de linhas para compilação de estatísticas.

Observação

Para obter mais informações sobre estatísticas no Microsoft Fabric, confira Estatísticas no Microsoft Fabric.

Convenções de sintaxe de Transact-SQL

Sintaxe

-- 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 ]
        [ [ , ] AUTO_DROP = { ON | OFF } ]
    ] ;  
  
<update_stats_stream_option> ::=  
    [ STATS_STREAM = stats_stream ]  
    [ ROWCOUNT = numeric_constant ]  
    [ PAGECOUNT = numeric_contant ]  
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse 
  
UPDATE STATISTICS [ schema_name . ] table_name   
    [ ( { statistics_name | index_name } ) ]  
    [ WITH   
       {  
              FULLSCAN   
            | SAMPLE number PERCENT   
            | RESAMPLE   
        }  
    ]  
[;]  
-- Syntax for Microsoft Fabric

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

Observação

Para ver a sintaxe do Transact-SQL para o SQL Server 2014 (12.x) e versões anteriores, confira a Documentação das versões anteriores.

Observação

Não há suporte a essa sintaxe para o pool de SQL sem servidor no Azure Synapse Analytics.

Argumentos

table_or_indexed_view_name

É o nome da tabela ou da exibição indexada que contém o objeto de estatísticas.

index_or_statistics_name ou statistics_name | index_name ou statistics_name

É o nome do índice no qual atualizar estatísticas ou o nome das estatísticas a serem atualizadas. Se index_or_statistics_name ou statistics_name não for especificado, o otimizador de consulta atualizará todas as estatísticas da tabela ou da exibição indexada. Isso inclui as estatísticas criadas com a instrução CREATE STATISTICS, as estatísticas de coluna única criadas quando a instrução AUTO_CREATE_STATISTICS está ativa e as estatísticas criadas para índices.

Para obter mais informações sobre AUTO_CREATE_STATISTICS, consulte Opções de ALTER DATABASE SET. Para exibir todos os índices de uma tabela ou exibição, use sp_helpindex.

FULLSCAN

Calcule as estatísticas verificando todas as linhas da tabela ou da exibição indexada. FULLSCAN e SAMPLE 100 PERCENT têm os mesmos resultados. FULLSCAN não pode ser usado com a opção SAMPLE.

SAMPLE number { PERCENT | ROWS }

Especifica a porcentagem aproximada ou o número de linhas da tabela ou da exibição indexada para uso do otimizador de consulta ao atualizar as estatísticas. Para PERCENT, number pode ser de 0 a 100 e, para ROWS, number pode ser de 0 ao número total de linhas. A porcentagem real ou o número de linhas que o otimizador de consulta usa como exemplo talvez não corresponda à porcentagem ou ao número especificado. Por exemplo, o otimizador de consulta verifica todas as linhas de uma página de dados.

SAMPLE é útil para casos especiais em que o plano de consulta, baseado na amostragem padrão, não é ideal. Na maioria das situações, não é necessário especificar SAMPLE porque o otimizador de consulta usa amostragem e, por padrão, determina o tamanho da amostra estatisticamente significativa conforme necessário, para criar planos de consulta de alta qualidade.

Observação

No SQL Server 2016 (13.x), ao usar o nível de compatibilidade de banco de dados 130, a amostragem de dados para criar estatísticas é feita em paralelo para melhorar o desempenho da coleta de estatísticas. O otimizador de consulta usará estatísticas de exemplo paralelas sempre que um tamanho de tabela exceder um determinado limite. A partir do SQL Server 2017 (14.x), independentemente do nível de compatibilidade do banco de dados, o comportamento foi alterado novamente para o uso de uma varredura serial para evitar possíveis problemas de desempenho com esperas excessivas de LATCH. O restante do plano de consulta durante a atualização de estatísticas manterá a execução paralela, se qualificado.

SAMPLE não pode ser usado com a opção FULLSCAN. Quando nem SAMPLE nem FULLSCAN estão especificados, o otimizador de consulta usa dados de exemplo e computa o tamanho do exemplo por padrão.

Recomendamos especificar 0 PERCENT ou 0 ROWS. Quando 0 PERCENT ou ROWS é especificado, o objeto de estatísticas é atualizado, mas não contém dados estatísticos.

Para a maioria das cargas de trabalho, a verificação completa não é necessária e a amostragem padrão é adequada. No entanto, algumas cargas de trabalho que são sensíveis a distribuições de dados com ampla variação podem exigir um tamanho maior de amostra ou até mesmo uma verificação completa. Embora as estimativas possam se tornar mais precisas com uma varredura completa do que com uma varredura por amostragem, planos complexos podem não se beneficiar substancialmente.

Para obter mais informações, consulte Componentes e conceitos de estatísticas.

RESAMPLE

Atualiza cada estatística usando sua taxa de amostragem mais recente.

O uso de RESAMPLE pode resultar em um exame de tabela completa. Por exemplo, estatísticas de índices usam um exame de tabela completa para sua taxa de amostragem. Quando nenhuma das opções de exemplo (SAMPLE, FULLSCAN, RESAMPLE) é especificada, o otimizador de consulta usa os dados de exemplo e computa o tamanho de exemplo por padrão.

Não há suporte para RESAMPLE no Warehouse no Microsoft Fabric.

PERSIST_SAMPLE_PERCENT = { ON | OFF }

Aplica-se a: SQL Server 2016 (13.x) Service Pack 1 CU4, SQL Server 2017 (14.x) Service Pack 1 ou SQL Server 2019 (15.x) e versões posteriores, Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure

Quando for ON, as estatísticas reterão o percentual de amostragem definido para as atualizações seguintes que não especificam explicitamente um percentual de amostragem. Quando for OFF, o percentual de amostragem de estatísticas será redefinido com a amostragem padrão nas atualizações seguintes que não especificarem explicitamente um percentual de amostragem. O padrão é OFF.

DBCC SHOW_STATISTICS e sys.dm_db_stats_properties expõem o valor de percentual de amostra persistente para a estatística selecionada.

Se AUTO_UPDATE_STATISTICS for executado, ele usará o percentual de amostragem persistente, se disponível; caso contrário, ele usará o percentual de amostragem padrão. O comportamento de RESAMPLE não é afetado por essa opção.

Se a tabela for truncada, todas as estatísticas criadas no heap ou árvore B (HoBT) truncado voltarão a usar a porcentagem de amostragem padrão.

Observação

No SQL Server, ao recriar um índice que anteriormente tinha estatísticas atualizadas com PERSIST_SAMPLE_PERCENT, o percentual de amostra persistente será redefinido de volta para o padrão. A partir do SQL Server 2016 (13.x) SP2 CU17, SQL Server 2017 (14.x) CU26 e SQL Server 2019 (15.x) CU10, a porcentagem de amostra persistente é mantida mesmo ao recompilar um índice.

ON PARTITIONS ( { <partition_number> | <range> } [, ...n] ) ]

Aplica-se a: SQL Server 2014 (12.x) e posterior

Força as estatísticas de nível folha que abrangem as partições especificadas na cláusula ON PARTITIONS a serem recomputadas e, em seguida, mescladas para criar as estatísticas globais. WITH RESAMPLE é necessário porque as estatísticas de partições criadas com taxas de amostragem diferentes não podem ser mescladas.

ALL | COLUMNS | INDEX

Atualize todas as estatísticas existentes, as estatísticas criadas em uma ou mais colunas ou as estatísticas criadas para índices. Se nenhuma das opções for especificada, a instrução UPDATE STATISTICS atualizará todas as estatísticas na tabela ou na exibição indexada.

NORECOMPUTE

Desabilite a opção de atualização das estatísticas automáticas, AUTO_UPDATE_STATISTICS, das estatísticas especificadas. Se essa opção for especificada, o otimizador de consulta concluirá essa atualização de estatísticas e desabilitará atualizações futuras.

Para reabilitar o comportamento da opção AUTO_UPDATE_STATISTICS, execute UPDATE STATISTICS novamente sem a opção NORECOMPUTE ou execute sp_autostats.

Aviso

O uso dessa opção pode produzir planos de consulta de qualidade inferior. É recomendável usar essa opção moderadamente e somente por um administrador de sistema qualificado.

Para obter mais informações sobre a opção AUTO_STATISTICS_UPDATE, consulte Opções de ALTER DATABASE SET.

INCREMENTAL = { ON | OFF }

Aplica-se a: SQL Server 2014 (12.x) e posterior

Quando for ON, as estatísticas serão recriadas por estatísticas de partição. Quando estiver OFF, a árvore de estatísticas será removida e o SQL Server calculará as estatísticas novamente. O padrão é OFF.

Se as estatísticas por partição não tiverem suporte, um erro será gerado. As estatísticas incrementais não têm suporte para os seguintes tipos de estatísticas:

  • Estatísticas criadas com os índices que não estejam alinhados por partição com a tabela base.
  • Estatísticas criadas em bancos de dados secundários legíveis AlwaysOn.
  • Estatísticas criadas em bancos de dados somente leitura.
  • Estatísticas criadas em índices filtrados.
  • Estatísticas criadas em exibições.
  • Estatísticas criadas em tabelas internas.
  • Estatísticas criadas com índices espaciais ou índices XML.

MAXDOP = max_degree_of_parallelism

Aplica-se ao: SQL Server (Começando pelo SQL Server 2016 (13.x) SP2 e SQL Server 2017 (14.x) CU3).

Substitui a opção de configuração max degree of parallelism enquanto durar a operação estatística. Para obter mais informações, veja Configurar a opção max degree of parallelism de configuração de servidor. Use MAXDOP para limitar o número de processadores usados em uma execução de plano paralelo. O máximo é de 64 processadores.

max_degree_of_parallelism pode ser:

1
Suprime a geração de plano paralelo.

>1 Restringe o número máximo de processadores usados em uma operação estatística paralela ao número especificado ou menos, com base na carga de trabalho atual do sistema.

0 (padrão)
Usa o número real de processadores, ou menos, com base na carga de trabalho atual do sistema.

update_stats_stream_option

Identificado apenas para fins informativos. Não há suporte. A compatibilidade futura não está garantida.

AUTO_DROP = { ON | OFF }

Aplica-se a: SQL Server 2022 (16.x) e versões posteriores.

No momento, se as estatísticas são criadas por uma ferramenta de terceiros em um banco de dados do cliente, esses objetos de estatísticas podem bloquear ou interferir nas alterações de esquema que o cliente pode desejar.

(A partir do SQL Server 2022 (16.x))|  Esse recurso permite a criação de objetos de estatísticas em um modo de forma que uma alteração de esquema não seja bloqueada pelas estatísticas. Em vez disso, as estatísticas serão removidas. Dessa forma, as estatísticas removidas automaticamente se comportam como estatísticas criadas automaticamente.

Observação

Tentar definir ou remover a definição da propriedade Auto_Drop em estatísticas criadas automaticamente pode gerar erros. As estatísticas criadas automaticamente sempre usam a remoção automática. Alguns backups, quando restaurados, poderão ter essa propriedade definida incorretamente até a próxima vez que o objeto de estatísticas for atualizado (manual ou automaticamente). No entanto, as estatísticas criadas automaticamente se comportam como estatísticas de remoção automática.

Comentários

Quando usar UPDATE STATISTICS

Para obter mais informações sobre quando usar UPDATE STATISTICS, consulte Quando atualizar estatísticas.

Limitações

  • Não há suporte para a atualização de estatística em tabelas externas. Para atualizar as estatísticas em uma tabela externa, remova e recrie as estatísticas.
  • A opção MAXDOP não é compatível com as opções STATS_STREAM, ROWCOUNT e PAGECOUNT.
  • A opção MAXDOP é limitada pela configuração MAX_DOP de grupo de carga de trabalho de Resource Governor, se usada.

Atualizar todas as estatísticas com sp_updatestats

Para obter informações sobre como atualizar estatísticas de todas as tabelas definidas pelo usuário e internas no banco de dados, confira o procedimento armazenado sp_updatestats. Por exemplo, o comando a seguir chama sp_updatestats para atualizar todas as estatísticas do banco de dados.

EXEC sp_updatestats;  

Índice automático e gerenciamento de estatísticas

Aproveite soluções como a Desfragmentação de índice adaptável para gerenciar automaticamente a desfragmentação de índice e as atualizações de estatísticas em um ou mais bancos de dados. Este procedimento escolhe automaticamente se deve recompilar ou reorganizar um índice de acordo com seu nível de fragmentação, entre outros parâmetros, e atualizar as estatísticas com um limite linear.

Determinando a última atualização das estatísticas

Para determinar quando as estatísticas foram atualizadas pela última vez, use a função STATS_DATE .

PDW/Azure Synapse Analytics

A sintaxe a seguir não é compatível com o Analytics Platform System (PDW) / Azure Synapse Analytics:

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;  

Permissões

Requer a permissão ALTER na tabela ou exibição.

Exemplos

a. Atualizar todas as estatísticas de uma tabela

O exemplo a seguir atualiza todas as estatísticas na tabela SalesOrderDetail.

USE AdventureWorks2022;  
GO  
UPDATE STATISTICS Sales.SalesOrderDetail;  
GO  

B. Atualizar as estatísticas de um índice

O exemplo a seguir atualiza as estatísticas do índice AK_SalesOrderDetail_rowguid da tabela SalesOrderDetail.

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

C. Atualizar estatísticas com o uso de amostragem de 50 por cento

O exemplo a seguir cria e atualiza as estatísticas das colunas Name e ProductNumber na tabela Product.

USE AdventureWorks2022;
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. Atualizar estatísticas com o uso de FULLSCAN e NORECOMPUTE

O exemplo a seguir atualiza as estatísticas Products na tabela Product força um exame completo de todas as linhas na tabela Product e desativa a atualização automática das estatísticas de Products.

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

Exemplos: Azure Synapse Analytics e PDW (Analytics Platform System)

E. Atualizar as estatísticas em uma tabela

O exemplo a seguir atualiza as estatísticas de CustomerStats1 na tabela Customer.

UPDATE STATISTICS Customer (CustomerStats1);  

F. Atualizar estatísticas usando uma verificação completa

O exemplo a seguir atualiza as estatísticas de CustomerStats1, com base na verificação de todas as linhas da tabela Customer.

UPDATE STATISTICS Customer (CustomerStats1) WITH FULLSCAN;  

G. Atualizar todas as estatísticas de uma tabela

O exemplo a seguir atualiza todas as estatísticas na tabela Customer.

UPDATE STATISTICS Customer;

H. Usar CREATE STATISTICS com AUTO_DROP

Para usar as estatísticas de remoção automática, basta adicionar o código abaixo à cláusula "WITH" de criação ou atualização de estatísticas.

UPDATE STATISTICS Customer (CustomerStats1) WITH AUTO_DROP = ON