Para fins de ajuste e teste de consulta, você pode atribuir manualmente uma contagem de linhas e uma contagem de páginas às estatísticas de índice de uma tabela executando UPDATE STATISTICS
. Mas como você recalcula/redefine as estatísticas para o conteúdo real da tabela?
--- Create a table..
CREATE TABLE dbo.StatTest (
i int NOT NULL,
CONSTRAINT PK_StatTest PRIMARY KEY CLUSTERED (i)
);
GO
--- .. and give it a thousand-or-so rows:
DECLARE @i int=1;
INSERT INTO dbo.StatTest (i) VALUES (@i);
WHILE (@i<1000) BEGIN;
INSERT INTO dbo.StatTest (i) SELECT @i+i FROM dbo.StatTest;
SET @i=@i*2;
END;
Uma consulta fictícia:
SELECT i%100, COUNT(*) FROM dbo.StatTest GROUP BY i%100;
... retornará o seguinte plano de consulta (a estimativa de linha no Index Scan é de 1024 linhas).
Execute o UPDATE STATISTICS
comando..
UPDATE STATISTICS dbo.StatTest WITH ROWCOUNT=10000000;
... e o plano ficou assim, agora com estimativa de 10 milhões de linhas:
Como faço para redefinir o rowcount para o conteúdo real da tabela sem usar WITH ROWCOUNT
?
Eu tentei WITH FULLSCAN
, WITH RESAMPLE
e WITH SAMPLE n ROWS
, mas a contagem de linhas de estatísticas permanece em 10 milhões de linhas. Inserir uma linha ou mesmo excluir todas as linhas não atualiza as estatísticas porque a alteração é muito pequena.
Use
DBCC UPDATEUSAGE
com aCOUNT_ROWS
opção.Documentação