Para fines de prueba y ajuste de consultas, puede asignar manualmente un recuento de filas y un recuento de páginas a las estadísticas de índice de una tabla mediante la ejecución UPDATE STATISTICS
. Pero, ¿cómo recalcula / restablece las estadísticas a los contenidos reales de la tabla?
--- 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;
Una consulta ficticia:
SELECT i%100, COUNT(*) FROM dbo.StatTest GROUP BY i%100;
... devolverá el siguiente plan de consulta (la estimación de filas en el Análisis del índice es de 1024 filas).
Ejecute el UPDATE STATISTICS
comando ...
UPDATE STATISTICS dbo.StatTest WITH ROWCOUNT=10000000;
... y el plan se ve así, ahora con una estimación de 10 millones de filas:
¿Cómo restablezco el conteo de filas al contenido real de la tabla sin usar WITH ROWCOUNT
?
Lo he intentado WITH FULLSCAN
, WITH RESAMPLE
y WITH SAMPLE n ROWS
, pero el recuento de filas estadísticas sigue siendo 10 millones de filas. Insertar una fila o incluso eliminar todas las filas no actualiza las estadísticas, porque el cambio es demasiado pequeño.
fuente