Jak zresetować statystyki po AKTUALIZACJI STATYSTYKI… Z ROWCOUNT


11

W celu strojenia i testowania zapytań można ręcznie przypisać liczbę wierszy i liczbę stron do statystyk indeksu tabeli, uruchamiając UPDATE STATISTICS. Ale jak ponownie obliczyć / zresetować statystyki do rzeczywistej zawartości tabeli?

--- 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;

Fikcyjne zapytanie:

SELECT i%100, COUNT(*) FROM dbo.StatTest GROUP BY i%100;

... zwróci następujący plan zapytań (oszacowanie wiersza w Skanie indeksu wynosi 1024 wiersze).

10 000 rzędów

Uruchom UPDATE STATISTICSpolecenie

UPDATE STATISTICS dbo.StatTest WITH ROWCOUNT=10000000;

... a plan wygląda tak, teraz z szacunkową liczbą 10 milionów wierszy:

10 milionów wierszy

Jak zresetować liczbę wierszy do rzeczywistej zawartości tabeli bez użycia WITH ROWCOUNT?

Próbowałem WITH FULLSCAN, WITH RESAMPLEi WITH SAMPLE n ROWS, ale rowcount statystyka pozostaje 10 milionów wierszy. Wstawienie wiersza lub nawet usunięcie wszystkich wierszy nie aktualizuje statystyk, ponieważ zmiana jest zbyt mała.

Odpowiedzi:


15

Użyj DBCC UPDATEUSAGEz COUNT_ROWSopcją.

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

Dokumentacja

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.