为了进行查询调整和测试,您可以通过运行手动将行计数和页计数分配给表的索引统计信息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万行。插入一行甚至删除所有行都不会更新统计信息,因为更改很小。