O que são estatísticas do banco de dados e como posso me beneficiar delas?

18

Já ouvi menção de estatísticas que o SQL Server mantém por padrão. O que eles estão rastreando e como posso usar essas informações para melhorar meu banco de dados?

goric
fonte

Respostas:

21

As estatísticas são simplesmente uma forma de metadados dinâmicos que ajudam o otimizador de consultas a tomar melhores decisões. Por exemplo, se houver apenas uma dúzia de linhas em uma tabela, não faz sentido acessar um índice para fazer uma pesquisa; você sempre estará melhor fazendo uma verificação completa da tabela. Mas se a mesma tabela aumentar para um milhão de linhas, provavelmente será melhor usar o índice. Mas se você consultar essa tabela em uma coluna que possui apenas muito poucos valores exclusivos (por exemplo, pode ser uma coluna "sex" contendo apenas "M" ou "F"), bem, na verdade, um STF pode ser melhor nesse caso, porque você precisa recuperar o bloco de qualquer maneira para criar o conjunto de resultados. Agora diga que sua tabela é 99% "M" e apenas 1% "F", devemos STF em um caso ou usar um índice no outro. Mesma tabela, mesma consulta, potencialmente quatro planos de consulta diferentes, dependendo do conteúdo da tabela. Esses tipos de coisas são as "estatísticas" e são individuais para cada banco de dados - até dois bancos de dados com tabela e estrutura de índice idênticas terão estatísticas diferentes.

Em resumo, em um mecanismo de banco de dados moderno, existem dois tipos de otimização de consulta: reescrever o SQL (otimização baseada em regras, como um compilador reescreve seu C para torná-lo mais eficiente) e escolher o caminho certo para os dados (otimização baseada em custos , como um compilador JIT que identifica pontos de acesso em tempo de execução). Você só precisa se preocupar com isso se detectar que o otimizador de consultas está fazendo algo obviamente errado (por exemplo, escolhendo o STF quando souber que um índice seria melhor).

Gaius
fonte
2
+1 Eu não poderia ter explicado melhor. É importante lembrar que as estatísticas são úteis apenas se mantidas atualizadas. Isso pode ser feito com estatísticas de atualização automática ou um comando de estatísticas de atualização agendado regularmente (todas as noites / semanalmente). Além disso, as recriações de índice executam automaticamente uma atualização de estatísticas.
Matt M
5

Eles são usados ​​pelo otimizador de consulta (white paper no MSDN) para rastrear a distribuição de valores em índices e / ou colunas.

Sua única preocupação deve ser a atualização regular : basta deixar o mecanismo do DB fazer suas coisas

gbn
fonte
2
Nem sempre. Há momentos em que a criação manual de uma estatística pode ajudar a consultar o desempenho.
mrdenny
@mrdenny: Quantas vezes você fez isso na vida real? Muito raramente. Eu não tenho o IIRC. Se precisar de estatísticas, pode-se argumentar que precisa de um índice, que tem estatísticas de qualquer maneira. Você só pode criar estatísticas de coluna conforme CREATE STATISTICS . Dado que o OP tinha que perguntar sobre estatísticas, eu diria que isso é uma coisa justa a se fazer.
gbn 24/01
11
Eu já fiz isso algumas vezes, mas não com frequência. Eu fui contra a sua declaração "Sua única preocupação deve ser a atualização regular", pois atualizar estatísticas não é a única coisa.
mrdenny