Eu tenho uma tabela de registros de 9 milhões com cerca de 452 MB de tamanho (desconsiderando os índices NC). Abaixo estão as estatísticas físicas e as colunas
Como um exemplo simples, se eu despejar a tabela em uma tabela temporária, o plano real mostra um tamanho de dados real e estimado de 42 GB . Veja a imagem abaixo.
Suspeito que isso se deva às duas colunas varchar(4000) que estão fazendo com que o tamanho estimado da linha seja maior do que são. No entanto, eu realmente não acho que 42 GB estão sendo transferidos - não tenho certeza de como isso seria possível. Não sei se estou vendo problemas de desempenho por causa disso, mas o plano de consulta parece assustador por causa dessas estimativas erradas. Por que o plano de consulta está tão errado nas varreduras de tabela estimadas e reais?
O SQL Server usa apenas uma estimativa aproximada para
varchar
que cada valor seja, em média, metade da capacidade da coluna .Portanto, cada um
varchar(4000)
será estimado em 2.000 bytes. Você tem dois deles, o que explica a maior parte da estimativa de 4.496 bytes.Parece que na realidade você poderia reduzir o tamanho máximo dessas colunas.
Isso reduziria o tamanho estimado da linha. Ter um tamanho de linha estimado preciso pode ajudar quando há operadores que consomem memória no plano para obter uma concessão de memória de tamanho adequado.