15W翻译

统计
   SQL Server查询优化器在为查询选择执行计划时使用基于成本的模型。 它估算不同执行计划的成本,并选择成本最低的计划。 但请记住,SQL Server不会搜索可用于查询的最佳执行计划,因为评估所有可能的替代方案在CPU方面既耗时又昂贵。 查询优化器的目标是找到足够快的执行计划。

   基数估计(在查询执行的每个步骤中需要处理的行数的估计)是查询优化中最重要的因素之一。 此数字会影响连接策略的选择,查询执行所需的内存量(内存授权)以及其他一些事项。

    访问数据时使用的索引选择属于这些因素。 您会记得,在I / O方面,密钥和RID查找操作很昂贵,并且当SQL Server估计需要大量这些操作时,它们不使用非聚簇索引。 SQL Server维护索引的统计信息 - 在某些情况下还包括列 - 这有助于执行此类估计。

SQL Server统计信息简介
    SQL Server统计信息是系统对象,其中包含有关索引键值中的数据分布的信息,有时还包含常规列值。 可以在支持比较操作的任何数据类型上创建统计信息,例如>,<,=等。

    让我们从上一章清单2-15中创建的dbo.Books表中检查IDX_BOOKS_ISBN索引统计信息。 您可以使用DBCC SHOW_STATISTICS('dbo.Books',IDX_BOOKS_ISBN)命令来完成此操作。 结果如图3-1所示。

  图片

图3-1:DBCC SHOW_STATISTICS输出

    如您所见,DBCC SHOW_STATISTICS命令返回三个结果集。 第一个包含有关统计信息的常规元数据信息,例如名称,更新日期,更新统计信息时索引中的行数等。 第一个结果集中的“步骤”列指示直方图中的步数/值的数量(稍后将详细介绍)。 查询优化程序不使用“密度”值,仅出于向后兼容性目的而显示。

    第二个结果集称为密度向量,它包含有关统计(索引)中键值组合的密度的信息。 它是基于1 /不同值公式计算的,它表示每个键值组合平均有多少行。 尽管IDX_Books_ISBN索引只定义了一个键列ISBN,但它还包含一个聚簇索引键作为索引行的一部分。 我们的表有1,252,500个唯一的ISBN值,ISBN列的密度为1.0 / 1,252,500 = 7.984032E-07。 (ISBN,BookId)列的所有组合也是唯一的并且具有相同的密度。

    最后的结果集称为直方图。 直方图中的每个记录(称为直方图步骤)都包括统计信息(索引)最左列中的样本键值以及有关从前一个值到当前RANGE_HI_KEY值的值范围内的数据分布的信息。 让我们更深入地检查直方图列。

      RANGE_HI_KEY列存储密钥的样本值。 此值是直方图步骤定义的范围的上限键值。 例如,在图3-1的直方图中记录(步骤)#3,其中RANGE_HI_KEY ='104-0100002488'存储有关从ISBN>'101-0100001796'到ISBN <='104-0100002488'的间隔的信息。

扫描二维码关注公众号,回复: 4503723 查看本文章

    RANGE_ROWS列估计间隔内的行数。 在我们的例子中,记录(步骤)#3定义的间隔有8,191行。

   EQ_ROWS表示有多少行的键值等于RANGE_HI_KEYupper绑定值。 在我们的例子中,只有一行ISBN ='104-0100002488'。

  DISTINCT_RANGE_ROWS表示密钥在区间内有多少个不同的值。 在我们的示例中,键的所有值都是唯一的,因此DISTINCT_RANGE_ROWS = RANGE_ROWS。

猜你喜欢

转载自www.cnblogs.com/xudan666/p/10119324.html
今日推荐