Eu tenho feito o curso MS10775A na semana passada e uma pergunta que surgiu que o treinador não conseguiu responder de forma confiável é:
Uma reindexação atualiza as estatísticas?
Encontramos discussões online argumentando que sim e que não.
Eu tenho feito o curso MS10775A na semana passada e uma pergunta que surgiu que o treinador não conseguiu responder de forma confiável é:
Uma reindexação atualiza as estatísticas?
Encontramos discussões online argumentando que sim e que não.
Você pode ter em mente o seguinte ao se preocupar com a atualização de estatísticas (copiado de Reconstruindo índices vs. Atualizando estatísticas (Benjamin Nevarez)
Por padrão, a
UPDATE STATISTICS
instrução usa apenas uma amostra de registros da tabela. UsandoUPDATE STATISTICS WITH FULLSCAN
irá varrer toda a tabela.Por padrão, a
UPDATE STATISTICS
instrução atualiza as estatísticas de índice e coluna. O uso daCOLUMNS
opção atualizará apenas as estatísticas da coluna. O uso daINDEX
opção atualizará apenas as estatísticas do índice.A reconstrução de um índice , por exemplo, usando
ALTER INDEX … REBUILD
também atualizará as estatísticas de índice com o equivalente a usar , aWITH FULLSCAN
menos que a tabela seja particionada; nesse caso, as estatísticas são apenas amostradas (aplica-se ao SQL Server 2012 e posterior).As estatísticas que foram criadas manualmente usando
CREATE STATISTICS
não são atualizadas por nenhumaALTER INDEX ... REBUILD
operação, incluindoALTER TABLE ... REBUILD
.ALTER TABLE ... REBUILD
atualiza estatísticas para o índice clusterizado, se um estiver definido na tabela que está sendo reconstruída.A reorganização de um índice , por exemplo, usando
ALTER INDEX … REORGANIZE
não atualiza nenhuma estatística.A resposta curta é que você precisa usar
UPDATE STATISTICS
para atualizar as estatísticas da coluna e que uma reconstrução do índice atualizará apenas as estatísticas do índice. Você pode forçar uma atualização de todas as estatísticas em uma tabela, incluindo estatísticas de índice e estatísticas criadas manualmente, com aUPDATE STATISTICS (tablename) WITH FULLSCAN;
sintaxe.O código a seguir ilustra as regras encapsuladas acima:
Primeiro, criaremos uma tabela com algumas colunas e um índice clusterizado:
Esta consulta mostra a data em que cada objeto de estatística foi atualizado pela última vez:
Os resultados mostram que ainda não houve atualizações, o que está correto, pois acabamos de criar a tabela:
Vamos reconstruir a tabela inteira e ver se isso atualiza as estatísticas:
Os resultados mostram que apenas as estatísticas do índice clusterizado foram atualizadas.
Em seguida, realizamos uma
UPDATE STATS
operação discreta:Como você pode ver, acabamos de atualizar as estatísticas na
d
coluna:Agora, atualizaremos as estatísticas de toda a tabela:
Como você pode ver, a única maneira de ter certeza de que todas as estatísticas estão atualizadas é atualizar cada uma manualmente ou atualizar a tabela inteira com
UPDATE STATISTICS (table);
.A página do Microsoft Docs para estatísticas do SQL Server afirma :