他们很简单:
select * from tablex where processed =’0′
处理后有一个索引,每个查询应该在具有1MM记录的表上返回< 1000行. 分析器建议在此创建一些统计信息.所以我的问题是:这些统计数据是什么?他们真的有助于表现吗?他们对上面的桌子有多昂贵? 请记住,绝对不会将自己称为sql Server经验丰富的用户…这是第一次使用此分析器.
解决方法
比方说,你有一个表只在主键上有一个聚簇索引.当您执行SELECT * FROM tablename WHERE col1 = value时,sql Server只有一个选项,用于扫描表中的每一行以找到匹配的行.
现在我们在col1上添加一个索引,所以你假设sql Server将使用索引来找到匹配的行,但并不总是如此.假设表有20万行,col1只有2个值:1和0.当sql Server使用索引查找数据时,索引包含指向聚簇索引位置的指针.鉴于索引列中只有两个值,因此sql Server将决定使扫描表更为有意义,因为使用索引将会更加有效.
现在我们再向表中添加80万行数据,但是这次col1中的值是很大的变化的.现在这是一个有用的索引,因为sql Server可以有效地使用索引来限制从表中拉出所需的内容. sql Server会使用索引吗?
这取决于.统计数据是什么呢?在某些时间点,使用AUTO UPDATE STATISTICS设置,服务器将更新索引的统计信息,并知道它是一个非常好的有效索引.然而,在此之前,它将忽略该指数是无关紧要的.
这是统计学的一个用途.但还有另外一种用途,与索引无关. sql Server保留表中所有列的基本统计信息.如果有足够的不同数据使其值得,sql Server实际上将在列上创建一个临时索引并使用它进行过滤.虽然这比使用现有索引需要更多的时间,但它比全表扫描花费更少的时间.
有时,您将获得建议,以便为有用的列创建特定统计信息.这些不是索引,而是跟踪列中数据的统计抽样,因此sql Server可以确定创建临时索引以返回数据是否有意义.
HTH