No MS SQL Server 2005, como posso extrair informações estatísticas sobre fração NULL (ou contagem NULL) para uma determinada coluna?
As mesmas informações estão disponíveis no Oracle e no PostgreSQL, e ouvi dizer que o MS SQL também possui estatísticas, mas não sei onde encontrá-las. O Google não ajudou muito.
Espero ouvir algo como
SELECT null_frac FROM pg_stats WHERE tablename='mytab' and attname='mycol';
/* PostgreSQL, stats gathered by ANALYZE */
ou
SELECT nullcnt FROM custom_stats_table WHERE tabname='MYTAB' and colname='MYCOL';
/* Oracle, stats gathered by dbms_stats.get_column_stats */
Não estou perguntando como calcular esses valores sozinho - eu sei como fazer isso. Preciso dessas estatísticas para vários milhares de colunas, e computar isso levaria muito tempo no banco de dados em que estou trabalhando. Preciso de aproximações e elas devem estar em algum lugar no servidor - elas são necessárias de qualquer maneira para o otimizador baseado em custo.
Nada tão fácil. Você precisaria usar
DBCC SHOW_STATISTICS
e olhar para o histograma, levando em consideração que as estatísticas podem ser filtradas ou com várias colunas.Provavelmente é mais fácil deixar o SQL Server fazer isso e gerar um plano de execução estimado para a instrução
select * from foo where bar is null
. O SQL Server usará as estatísticas apropriadas, se existirem, ou as criará, se não existirem (supondo que a opção de criação automática de estatísticas esteja habilitada).Você pode então olhar para o número estimado de linhas indo para o
SELECT
iterador (isso aparece comoStatementEstRows
no XML para fins de análise programaticamente)código de exemplo
Para resultados exatos, algo como
pode funcionar (não é possível testar agora, não tem MS SQL aqui). Obviamente, isso será mais caro do que perguntar ao módulo de estatísticas.