2008-10-09 64 views
14

因此,对于这一项目,我们正在定期(每分钟左右。我用了“在数据库引擎分析查询”,以检查它们。SQL Server统计

执行一堆查询他们是非常简单的: SELECT * FROM TableX的地方加工=“0”

有一个指标上进行处理,并且每个查询应该在表中返回< 1000行与1MM记录

分析器建议在创建关于这个的一些统计...所以我的问题是:这些统计是什么?他们真的有帮助吗?性能?他们对于像上面这样的桌子有多昂贵?

请记住,我绝不会称自己是一名SQL Server有经验的用户......而且这是第一次使用此分析器。

回答

24

统计数据是SQL Server用来确定如何获取数据的可行性。

比方说,你有一个只有主键上有聚集索引的表。当您执行SELECT * FROM tablename WHERE col1=value时,SQL Server只有一个选项,用于扫描表中的每一行以查找匹配的行。

现在我们在col1上添加一个索引,以便您假定SQL Server将使用索引来查找匹配的行,但事实并非如此。假设表格有200,000行,col1只有2个值:1和0.当SQL Server使用索引查找数据时,索引包含指向聚簇索引位置的指针。鉴于索引列中只有两个值,SQL Server认为只需扫描表是更合理的,因为使用索引会更有效。

现在我们再向表中添加800,000行数据,但是这次col1中的值差别很大。现在这是一个有用的索引,因为SQL Server可以可靠地使用索引来限制它需要从表中提取的内容。 SQL Server会使用索引吗?

这取决于。统计数据依赖于什么。在某个时间点,设置AUTO UPDATE STATISTICS,服务器将更新索引的统计信息,并知道这是一个非常好的有效索引。然而,在那之前,它会忽视索引作为不相关的。

这是统计的一种用法。但还有另外一种用途,那与指数无关。 SQL Server保留有关表中所有列的基本统计信息。如果有足够的不同数据使其值得,那么SQL Server实际上会在列上创建一个临时索引并用它来过滤。虽然这比使用现有索引需要更多的时间,但比全表扫描花费的时间更少。

有时,您会得到建议以创建对该列有用的列的特定统计信息。这些不是索引,但是会跟踪列中数据的统计抽样,因此SQL Server可以确定创建临时索引以返回数据是否合理。

HTH

+0

“服务器将更新索引的统计信息,并知道这是用一个非常良好的,有效的指标” - 依据是什么?何时该索引被确定为无效使用? – BornToCode 2016-06-19 10:09:18

0

在Sql Server 2005中,设置自动创建统计信息和自动更新统计信息。您不必担心创建它们或自己维护它们,因为数据库本身处理得非常好。