我正在尝试了解统计信息采样的工作原理,以及以下是否是采样统计信息更新的预期行为。
我们有一个按日期划分的大型表,其中有数十亿行。分区日期是先前的业务日期,因此是升序键。我们仅将前一天的数据加载到该表中。
数据加载会在一夜之间进行,因此在4月8日(星期五),我们加载了7月7日的数据。
每次运行后,我们都会更新统计信息,尽管需要抽样,而不是FULLSCAN
。
也许我很天真,但我希望SQL Server能够确定范围内的最高键和最低键,以确保获得准确的范围样本。根据这篇文章:
对于第一个存储桶,下边界是生成直方图的列的最小值。
但是,它没有提及最后一个存储桶/最大值。
由于采样的统计信息是在8日上午更新的,因此该样本未达到表格(第7位)中的最高值。
由于我们对前一天的数据进行了很多查询,因此导致基数估计不准确,并且许多查询超时。
SQL Server是否应该不标识该键的最大值并将其用作最大值RANGE_HI_KEY
?还是这仅仅是不使用更新的限制之一FULLSCAN
?
版本SQL Server 2012 SP2-CU7。由于OPENQUERY
SP3 中行为的变化,即四舍五入到SQL Server和Oracle之间的链接服务器查询中的数字,我们当前无法升级。