UPDATE STATISTICS (Transact-SQL)
Atualiza estatísticas de otimização de consulta 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.
Aplica-se a: SQL Server (SQL Server 2008 até a versão atual), Banco de dados SQL do Windows Azure (versão inicial até a versão atual). |
Convenções da 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
[ ON PARTITIONS ( { <partition_number> | <range> } [, …n] ) ]
| <update_stats_stream_option> [ ,...n ]
]
[ [ , ] [ ALL | COLUMNS | INDEX ]
[ [ , ] NORECOMPUTE ]
[ [ , ] INCREMENTAL = { ON | OFF } ]
] ;
<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 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.
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.
ON PARTITIONS ( { <número_da_partição> | <intervalo> } [, …n] ) ]
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 em conjunto.Aplica-se a: SQL Server 2014 a SQL Server 2014.
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 ALTER DATABASE SET (Transact-SQL).
INCREMENTAL = { ON | OFF }
Quando estiver ON, as estatísticas serão recriadas por estatísticas de partição. Quando estiver OFF, a árvore de estatísticas será ignorada e o SQL Server recomputará as estatísticas. 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.
Aplica-se a: SQL Server 2014 a SQL Server 2014.
<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 Estatísticas.
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 AdventureWorks2012;
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 AdventureWorks2012;
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 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.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 AdventureWorks2012;
GO
UPDATE STATISTICS Production.Product(Products)
WITH FULLSCAN, NORECOMPUTE;
GO
Consulte também
Referência
CREATE STATISTICS (Transact-SQL)
DBCC SHOW_STATISTICS (Transact-SQL)
DROP STATISTICS (Transact-SQL)