统计信息收集与普通表统计信息有何不同?

Mic*_*een 3 sql-server statistics errors sql-server-2017

我有一张小桌子,只有几行

create table dbo.p(i int);
insert dbo.p(i)
values (1), (2), (3), (4), (4);
Run Code Online (Sandbox Code Playgroud)

我创建了统计数据;没有索引,只有统计数据。

create statistics p_c on dbo.p(i) with fullscan;
Run Code Online (Sandbox Code Playgroud)

我正在调查各种事情,所以我尝试将 ROWCOUNT 设置为 bigint 的上限。

update statistics dbo.p p_c with rowcount = 9223372036854775807;
Run Code Online (Sandbox Code Playgroud)

此操作失败并显示错误消息

消息 3739,级别 11,状态 3,第 346 行
无法更新索引“p_c”,因为它不是统计信息集合。

ROWCOUNT = 1;尽管成功了,但它也失败了update statistics dbo.p p_c

该错误不在文档中。我在网上找不到任何相关的内容。

与普通的表统计数据相比,什么是统计数据收集?为什么设置 ROWCOUNT 可能会在这里失败?

SQL Server 2017 (RTM-CU31-GDR) (KB5021126)

Mar*_*ith 5

当您更新统计信息并设置rowcountpagecount更新分区级别元数据而不是统计信息本身时。

这是在查询时显示的sys.dm_db_partition_stats,而sys.partitions不是RowsDBCC SHOW_STATISTICS.

对于未绑定到索引的统计信息,没有相应的分区元数据需要更新。

至于“集合” - 我认为它可能是因为该命令将在该索引的表中所有分区的元数据中分配指定的行计数。

即,对于具有四个分区的表,rowcount = 9223372036854775807设置最终为我的三个分区2305843009213693951和一个分区2305843009213693954