【问题标题】:SQL Server STATISTICSSQL 服务器统计
【发布时间】:2010-09-16 07:32:06
【问题描述】:

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

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

已处理有一个索引,并且每个查询应在具有 1MM 记录的表上返回

Analyzer 建议在此创建一些 STATISTICS.... 所以我的问题是:这些统计数据是什么?它们真的有助于表现吗?像上面这样的桌子要花多少钱?

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

【问题讨论】:

    标签: sql-server database indexing statistics


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      统计数据是 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-18
        • 1970-01-01
        • 1970-01-01
        • 2021-05-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多