我有一张小桌子,只有几行
create table dbo.p(i int);
insert dbo.p(i)
values (1), (2), (3), (4), (4);
我创建了统计数据;没有索引,只有统计数据。
create statistics p_c on dbo.p(i) with fullscan;
我正在调查各种事情,所以我尝试将 ROWCOUNT 设置为 bigint 的上限。
update statistics dbo.p p_c with rowcount = 9223372036854775807;
此操作失败并显示错误消息
消息 3739,级别 11,状态 3,第 346 行
无法更新索引“p_c”,因为它不是统计信息集合。
ROWCOUNT = 1;
尽管成功了,但它也失败了update statistics dbo.p p_c
。
该错误不在文档中。我在网上找不到任何相关的内容。
与普通的表统计数据相比,什么是统计数据收集?为什么设置 ROWCOUNT 可能会在这里失败?
SQL Server 2017 (RTM-CU31-GDR) (KB5021126)
当您更新统计信息并设置
rowcount
或pagecount
更新分区级别元数据而不是统计信息本身时。这是在查询时显示的
sys.dm_db_partition_stats
,而sys.partitions
不是Rows
由DBCC SHOW_STATISTICS
.对于未绑定到索引的统计信息,没有相应的分区元数据需要更新。
至于“集合” - 我认为它可能是因为该命令将在该索引的表中所有分区的元数据中分配指定的行计数。
即,对于具有四个分区的表,
rowcount = 9223372036854775807
设置最终为我的三个分区2305843009213693951
和一个分区2305843009213693954
。