Eu tenho uma pequena mesa com poucas linhas
create table dbo.p(i int);
insert dbo.p(i)
values (1), (2), (3), (4), (4);
Criei estatísticas; nenhum índice, apenas as estatísticas.
create statistics p_c on dbo.p(i) with fullscan;
Estou investigando várias coisas, então tentei definir ROWCOUNT para o limite superior de um bigint.
update statistics dbo.p p_c with rowcount = 9223372036854775807;
Isso falha com mensagem de erro
Msg 3739, Nível 11, Estado 3, Linha 346
Não é possível ATUALIZAR o índice 'p_c' porque não é uma coleção de estatísticas.
Também falha com ROWCOUNT = 1;
embora update statistics dbo.p p_c
seja bem-sucedido.
Este erro não está na documentação . Não consigo encontrar nada online que pareça relevante.
O que é uma coleção de estatísticas em oposição às antigas estatísticas de tabela? Por que a configuração de ROWCOUNT pode estar falhando aqui?
Servidor SQL 2017 (RTM-CU31-GDR) (KB5021126)
Quando você atualiza as estatísticas e configura
rowcount
oupagecount
isso atualiza os metadados no nível da partição em vez das próprias estatísticas.Isso é mostrado durante a consulta
sys.dm_db_partition_stats
esys.partitions
em vez doRows
retornado porDBCC SHOW_STATISTICS
.Para estatísticas não vinculadas a um índice, não há metadados de partição correspondentes para atualizar.
Quanto à "coleção" - presumo que possa ser porque o comando distribuirá a contagem de linhas especificada pelos metadados de todas as partições da tabela para esse índice.
ou seja, para uma tabela com quatro partições, a configuração
rowcount = 9223372036854775807
acabou com três partições2305843009213693951
e uma com2305843009213693954
para mim.