繁体   English   中英

SQL Server统计

[英]SQL Server STATISTICS

因此,对于这个项目,我们有一堆定期执行的查询(每分钟左右。我使用“数据库引擎中的分析查询”来检查它们。

它们非常简单:select * from tablex where processed ='0'

处理时有一个索引,每个查询应在具有1MM记录的表上返回<1000行。

分析器建议在此创建一些统计数据......所以我的问题是:这些统计数据是什么? 他们真的有助于表现吗? 对于像上面这样的桌子,它们的成本有多高?

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

统计信息是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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM