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

