1

显然,我对索引统计有一些不明白的地方。

我有一个包含数百万行的表用于记录目的。为了提高性能,我创建了一个视图和一个唯一的聚集索引(必须这样做,因为第一个索引必须是唯一的聚集索引)以及一个非聚集索引,以便能够在索引中包含更多列。

现在我比较一些有和没有这些索引和视图的查询的性能;我确实从中获得了更快的速度,并且读取和 CPU 使用率似乎也更低。

但是,当我查看 sql server 应用的执行计划时,我发现该非聚集索引上的 Index Seek 上有一个警告,即某些列缺少统计信息;这些列也确实出现在我的 where 子句中,所以我认为这里可能仍有一些性能需要改进。执行计划有两列抱怨没有统计信息;其中一个在非聚集索引内,另一个在该索引的包含子句内。无论如何,我不明白这些统计数据是如何丢失的。

例如这里http://msdn.microsoft.com/en-us/library/ms190397.aspx它声明“查询优化器在创建索引时为表或视图上的索引创建统计信息。”。好吧,我只是创建了这些索引,从那时起没有更新或插入任何行。我还检查并确保启用了 AUTO_UPDATE_STATISTICS 和 AUTO_CREATE_STATISTICS,我在这里缺少什么?

我还通过 SQL Server Management Studio 查看了该索引的统计信息:(展开视图,然后右键单击统计信息下的非聚集索引,然后选择属性)在统计信息列下可以看到提到的两个列之一(那个不在 include 子句中)。

我怎样才能摆脱这个警告,即创建/强制这些统计数据存在?

4

1 回答 1

0

尝试使用以下代码创建统计信息:

CREATE STATISTICS StatName
ON dbo.IndexedView(ColumnName,...)
WITH SAMPLE 25 PERCENT 
于 2013-10-15T15:37:32.167 回答