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).
Uruchom UPDATE STATISTICS
polecenie
UPDATE STATISTICS dbo.StatTest WITH ROWCOUNT=10000000;
... a plan wygląda tak, teraz z szacunkową liczbą 10 milionów wierszy:
Jak zresetować liczbę wierszy do rzeczywistej zawartości tabeli bez użycia WITH ROWCOUNT
?
Próbowałem WITH FULLSCAN
, WITH RESAMPLE
i 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.