В целях настройки запросов и тестирования вы можете вручную запустить rowcount и pagecount для статистики индекса таблицы UPDATE STATISTICS
. Но как вы пересчитываете / сбрасываете статистику в фактическое содержимое таблицы?
--- 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;
Пустой запрос:
SELECT i%100, COUNT(*) FROM dbo.StatTest GROUP BY i%100;
... вернет следующий план запроса (оценка строки при сканировании индекса составляет 1024 строки).
Запустите UPDATE STATISTICS
команду ..
UPDATE STATISTICS dbo.StatTest WITH ROWCOUNT=10000000;
... и план выглядит так, теперь с оценкой в 10 миллионов строк:
Как мне сбросить количество строк до фактического содержимого таблицы без использования WITH ROWCOUNT
?
Я пытался WITH FULLSCAN
, WITH RESAMPLE
и WITH SAMPLE n ROWS
, но статистика по количеству строк остается 10 миллионов строк. Вставка строки или даже удаление всех строк не обновляет статистику, потому что изменение слишком мало.