Sorgu ayarlama ve test etme amacıyla, bir tablonun dizin istatistiklerine çalışarak manuel olarak bir satır sayısı ve sayfa sayısı atayabilirsiniz UPDATE STATISTICS
. Ancak istatistikleri tablonun gerçek içeriğine nasıl yeniden hesaplar / sıfırlarsınız?
--- 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;
Sahte bir sorgu:
SELECT i%100, COUNT(*) FROM dbo.StatTest GROUP BY i%100;
... aşağıdaki sorgu planını döndürür (Dizin Taraması'ndaki satır tahmini 1024 satırdır).
UPDATE STATISTICS
Komutu çalıştırın ..
UPDATE STATISTICS dbo.StatTest WITH ROWCOUNT=10000000;
... ve plan şu şekilde görünüyor, şimdi 10 milyon satırlık bir tahminle:
Satır sayısını kullanmadan tablonun asıl içeriğine nasıl sıfırlayabilirim WITH ROWCOUNT
?
Denedim WITH FULLSCAN
, WITH RESAMPLE
ve WITH SAMPLE n ROWS
istatistik satır sayısı 10 milyon satır olmaya devam ediyor. Bir satır eklemek veya hatta tüm satırları silmek istatistikleri güncellemez, çünkü değişiklik çok küçüktür.