Як скинути статистику після ОНОВЛЕННЯ СТАТИСТИКИ… З РОЗКОМ


11

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

10 000 рядів

Виконайте UPDATE STATISTICSкоманду ..

UPDATE STATISTICS dbo.StatTest WITH ROWCOUNT=10000000;

... і план виглядає приблизно так, зараз з оцінкою 10 мільйонів рядків:

10 мільйонів рядів

Як повернути кількість рядків до фактичного вмісту таблиці без використання WITH ROWCOUNT?

Я спробував WITH FULLSCAN, WITH RESAMPLEі WITH SAMPLE n ROWS, але ROWCOUNT статистика залишається 10 мільйонів рядків. Вставлення рядка або навіть видалення всіх рядків не оновлює статистику, оскільки зміна занадто мала.

Відповіді:


15

Використовувати DBCC UPDATEUSAGEз COUNT_ROWSопцією.

DBCC UPDATEUSAGE 
(   { database_name | database_id | 0 } 
    [ , { table_name | table_id | view_name | view_id } 
    [ , { index_name | index_id } ] ] 
) [ WITH [ NO_INFOMSGS ] [ , ] [ COUNT_ROWS ] ] 

Документація

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.