Compartilhar via


UPDATE STATISTICS (Transact-SQL)

Atualiza estatísticas de otimização de consultas de 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. Porém, a atualização de estatísticas faz com que as consultas sejam recompiladas. Recomendamos não atualizar estatísticas com muita frequência porque existe uma compensação de desempenho entre a melhoria dos planos de consulta e o tempo necessário à recompilação das 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.

Para obter mais informações sobre estatísticas, inclusive quando usar UPDATE STATISTICS, consulte Usando estatísticas para melhorar o desempenho de consultas.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

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 ]

Argumentos

  • table_or_indexed_view_name
    É o nome da tabela ou da exibição indexada na qual atualizar estatísticas.

  • index_or_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 não estiver especificado, o otimizador de consulta atualizará todas as estatísticas da tabela ou 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 ALTER DATABASE SET (Transact-SQL). Para exibir todos os índices de uma tabela ou exibição, é possível usar sp_helpindex.

  • FULLSCAN
    Compute as estatísticas examinando 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, o number pode ser de 0 a 100 e para ROWS, o number pode ser de 0 até o 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 examina 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.

    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.

  • 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.

  • 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.

    Observação sobre cuidadosCuidado

    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 ALTER DATABASE SET (Transact-SQL). Para obter mais informações sobre como desabilitar e reabilitar atualizações de estatísticas, consulte Usando estatísticas para melhorar o desempenho de consultas.

  • <update_stats_stream_option>
    Identificado apenas para fins informativos. Sem suporte. A compatibilidade futura não está garantida.

Comentários

Quando usar UPDATE STATISTICS

Para obter mais informações sobre quando usar UPDATE STATISTICS, consulte Usando estatísticas para melhorar o desempenho de consultas.

Atualizando 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, consulte o procedimento armazenado sp_updatestats (Transact-SQL). Por exemplo, o comando a seguir chama sp_updatestats para atualizar todas as estatísticas do banco de dados.

EXEC sp_updatestats

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.

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 as estatísticas de todos os índices na tabela SalesOrderDetail.

USE AdventureWorks2008R2;
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 AdventureWorks2008R2;
GO
UPDATE STATISTICS Sales.SalesOrderDetail AK_SalesOrderDetail_rowguid;
GO

C. Atualizar estatísticas usando amostragem de 50 por cento

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

USE AdventureWorks2008R2;
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 usando 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 AdventureWorks2008R2;
GO
UPDATE STATISTICS Production.Product(Products)
    WITH FULLSCAN, NORECOMPUTE;
GO