Sql Server Statistics

来源:互联网 发布:跨境电商软件 编辑:程序博客网 时间:2024/05/21 05:57

当大量数据导入表中有时需要做Statistics 的更新。

操作层面:Sql Server 数据库

<PIC>

Create Statistics 的时机


查询优化器已经用下列方式建立统计数据:


  1. 建立索引时,查询优化器就会针对数据表或检视表的索引建立统计数据。这些统计数据是针对索引的索引键数据行所建立的。如果索引是筛选的索引,查询优化器就会在针对筛选索引所指定的相同数据列子集上建立筛选的统计数据。
  2. 开启 AUTO_CREATE_STATISTICS时,查询优化器会针对查询述词中的单一数据行建立统计数据。


对于大部分查询而言,这两种建立统计数据的方法可确保高质量的查询计划。不过,在少数情况下,您可以使用CREATE STATISTICS语句来建立其他统计数据,以便改善查询计划。这些额外的统计资料可以撷取查询优化器在建立索引或单一数据行的统计数据时无法解释的统计相互关联。您的应用程序可能会在数据表数据中具有其他统计相互关联,而且如果它们计算成统计数据对象,就可让查询优化器改善查询计划。例如,数据列子集的筛选统计数据或查询述词数据行的多重数据行统计数据可能会改善查询计划。


使用 CREATESTATISTICS语句来建立统计数据时,我们建议您将AUTO_CREATE_STATISTICS选项保持开启状态,让查询优化器能够继续例行地针对查询述词数据行建立单一数据行统计数据。


当下列任何情况适用时,请考虑使用 CREATESTATISTICS语句来建立统计数据:


  • Database Engine Tuning Advisor建议您建立统计资料。
  • 查询述词包含多个尚未存在相同索引中的相互关联数据行。
  • 查询会从数据子集中选取。
  • 查询具有遗失的统计资料。


查询述词包含多个相互关联的数据行


当查询述词包含多个具有跨数据行关联性与相依性的资料行时,多个数据行的统计数据可能会改善查询计划。多个数据行的统计数据报含跨数据行相互关联统计数据 (称为「密度」(Density)),而且这些统计数据不会在单一数据行统计数据中提供。当查询结果相依于多个数据行之间的数据关联性时,密度可以改善基数估计值。


如果数据行已经存在相同的索引中,就表示多重数据行统计数据对象已经存在,而且您不需要手动建立此对象。如果数据行尚未存在相同的索引中,您可以针对数据行建立索引或使用 CREATESTATISTICS语句,藉以建立多重数据行统计数据。相较于统计数据对象而言,这种统计数据需要更多系统资源来维护索引。如果应用程序不需要多重数据行索引,您就可以建立统计数据对象而不建立索引,藉以节省系统资源。


建立多重数据行统计数据时,统计数据对象定义中的数据行顺序会影响建立基数估计值之密度的有效性。统计数据对象会将索引键数据行之每个前置词的密度储存在统计数据对象定义中。

若要建立对于基数估计值有用的密度,查询述词中的数据行必须与统计数据对象定义的其中一个数据行前置词相符。例如,下列命令会针对LastNameMiddleNameFirstName数据行建立多重数据行统计数据对象。


多少情况只需要更新。

单个更新:

<PIC>

对勾勾上即可。

也可通过Sql语句批量更新表下的统计:

updatestatistics <TableName>withfullscan


0 0
原创粉丝点击