クエリのチューニングとテストの目的で、を実行して、行数とページ数をテーブルのインデックス統計に手動で割り当てることができます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;
...計画は次のようになり、推定1000万行になります。
使用せずに行数をテーブルの実際の内容にリセットするにはどうすればよいWITH ROWCOUNT
ですか?
私が試したWITH FULLSCAN
、WITH RESAMPLE
そしてWITH SAMPLE n ROWS
、しかし、統計行数を10万行のまま。行を挿入したり、すべての行を削除したりしても、変更が小さすぎるため、統計は更新されません。