Sql server 表统计信息未得到更新

Sql server 表统计信息未得到更新,sql-server,sql-server-2016,rdbms,Sql Server,Sql Server 2016,Rdbms,在SQL Server 2016中,我们面临着一个奇怪的场景。我们有一张超过300000行的桌子 我们在表上创建了一个索引。我们将此表用作联接的一部分(注意:联接关闭中的列已创建索引),但查询优化器正在执行表扫描 当我们检查统计数据时: RowsInTable RowsSampled NULL NULL 然后我跑: UPDATE STATISTICS tablename 统计数据没有改变 然后我们尝试重建索引: ALTER INDEX ALL ON dbo.ta

在SQL Server 2016中,我们面临着一个奇怪的场景。我们有一张超过300000行的桌子

我们在表上创建了一个索引。我们将此表用作联接的一部分(注意:联接关闭中的列已创建索引),但查询优化器正在执行表扫描

当我们检查统计数据时:

RowsInTable    RowsSampled
  NULL          NULL
然后我跑:

UPDATE STATISTICS tablename 
统计数据没有改变

然后我们尝试重建索引:

ALTER INDEX ALL ON dbo.tablename
REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON,
              STATISTICS_NORECOMPUTE = ON)
但是,数据并没有改变

我们已验证没有发生批量更新/插入/删除


请帮忙

我们尝试了这么多的统计组合,但都没有奏效

最后我们在下面试了一下,效果很好

ALTER INDEX ALL ON dbo.Tablename
REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON,STATISTICS_NORECOMPUTE = ON)
注意:在生产之前,我们应该三思而后行。我们应该知道表的数据大小,否则我们将有阻塞


我们仍然不确定是什么导致了这种行为,但我怀疑我们在堆上有索引(非集群唯一索引)。

我们尝试了这么多与统计数据的组合,但没有得到帮助

最后我们在下面试了一下,效果很好

ALTER INDEX ALL ON dbo.Tablename
REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON,STATISTICS_NORECOMPUTE = ON)
注意:在生产之前,我们应该三思而后行。我们应该知道表的数据大小,否则我们将有阻塞


我们仍然不确定是什么导致了这种行为,但我怀疑我们在堆上有索引(非群集唯一索引)。

您是否尝试了update statistics语句中的FULLSCAN选项。您确定这是问题所在吗?你的查询慢吗?如果速度很慢,为什么您认为这是因为引擎执行索引扫描?最好发布您的实际查询,以便查看发生了什么以及什么可能导致性能问题。是的,我在实际执行计划中看到了这一点……问题索引是过滤索引吗?当您看到
rows=null,rows sampled=null
这样时,它有时是一个空的筛选索引,因为筛选表达式与任何内容都不匹配。不,它是简单的索引,非常奇怪。您是否尝试了update statistics语句中的FULLSCAN选项。您确定这是问题所在吗?你的查询慢吗?如果速度很慢,为什么您认为这是因为引擎执行索引扫描?最好发布您的实际查询,以便查看发生了什么以及什么可能导致性能问题。是的,我在实际执行计划中看到了这一点……问题索引是过滤索引吗?当您看到
rows=null,rows sampled=null
时,它有时是一个空的筛选索引,因为筛选表达式不匹配任何内容。不,它是简单的索引,非常奇怪,这与您最初尝试的有什么不同?脚本看起来是一样的。这与您最初尝试的有什么不同?脚本看起来是一样的