Для налаштування запитів і тестування ви можете вручну призначити кількість рядків і кількість сторінок статистиці індексу таблиці, запустивши 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
, але ROWCOUNT статистика залишається 10 мільйонів рядків. Вставлення рядка або навіть видалення всіх рядків не оновлює статистику, оскільки зміна занадто мала.