Atualizando as estatistica apos INDEX REBUILD


Sabe-se que as estatísticas são atualizadas durante a recriação de índice (ALTER INDEX REBUILD). Então, surge uma dúvida: se o processo noturno de manutenção realiza o rebuild de índice diariamente, ainda é necessário atualizar as estatísticas?


Com o objetivo de responder essa pergunta, vamos criar um cenário para teste com as tabelas tbUsuario e tbObjetos.


image


Foram criados os índices e as estatísticas nas tabelas:


CREATE INDEX idxUsuarioId ON tbObjetos(UsuarioId)
CREATE INDEX idxNome ON tbUsuario(Nome)
CREATE INDEX idxTipo ON tbObjetos(Tipo)
CREATE STATISTICS statIdade ON tbUsuario(Idade)
CREATE STATISTICS statUsuario ON tbObjetos(UsuarioId, ObjetoId)


Através do comando UPDATE STATISTICS, atualizamos todas as estatísticas manualmente:


image




No dia seguinte, rodamos um Rebuild das tabelas:


ALTER INDEX pkUsuario ON tbUsuario REBUILD
ALTER INDEX
pkObjetos ON tbObjetos REBUILD


Observamos quais estatísticas foram atualizadas:


image



Conclusão: Somente as estatísticas associadas aos índices foram atualizadas. As estatísticas associadas aos demais índices ou criadas manualmente (inclusive auto-create stats) não são atualizadas durante o Rebuild de índice.  


Portanto, o comentário de atualizar estatística após o rebuild de índices é válido,

Comments (3)

  1. Comentário Recebido por Email:

    Interessante Fabrício. Só não entendi porque Paul Randal diz que não precisa atualizar as estatísticas após o rebuild:

    http://www.sqlskills.com/BLOGS/PAUL/post/Search-Engine-QA-10-Rebuilding-Indexes-and-Updating-Statistics.aspx

    Abraços

    Demétrio Silva

    MCP – MCTS – MCITP SQL SERVER 2008

  2. Olá Demétrio!

    Excelente link e comentário!!! E como você disse, o Paul Randal diz que não precisa atualizar as estatísticas após o Rebuild dos índices:

    "The simple answer is not to update statistics on INDEXES THAT HAVE JUST BEEN REBUILT."

    Revendo o que escrevi, não estou muito fora da linha de pensamento. Os índices que foram recriados (pkUsuario e pkObjetos) tiveram as estatísticas atualizadas. Entretanto, todos os demais índices e estatísticas ficaram intactos e sem atualização.

    Se for importante manter as estatísticas atualizadas (principalmente as estatísticas criadas automaticamente pelo Optimizer), então é importante rodar o sp_updatestats (ou algum comando similar).

    Abraços,

    Fabricio

  3. Demétrio Silva disse:

    Justamente Fabrício,

    Onde você fala "Portanto, o comentário de atualizar estatística após o rebuild de índices é válido, " achei meio dúbio pois você não citou que apenas as estatísticas que não são dos índices devem ser atualizadas.

    Foi mais interpretação do texto mesmo.

    Só para abrir uma discussão: Não vejo muitas razões em criar planos para atualizar as estatísticas quando temos o auto-update (claro, levando em consideração como elas são atualizadas conforme support.microsoft.com ). Sinceramente, me deparei apenas uma vez onde isso foi realmente preciso.

    Abraço

    Demétrio Silva

    MCP – MCTS – MCITP – MCT SQL SERVER 2008

Skip to main content