更新统计信息时抽样工作如何?


10

我有几个大桌子。我想通过每周维护计划来确保其统计信息是最新的。

但是,这样做会花费太多时间。

如果我指定

WITH SAMPLE 50 PERCENT

然后SQL Server进行采样:

  1. 页面的前50%
  2. 每隔一页
  3. 或其他策略?

BOL对此尚不清楚。

Answers:


16

因为WITH SAMPLE 50 PERCENT它的作用就像SQL Server表中的每个数据页都掷硬币。如果它落在了头上,那么它将读取页面上的所有行。如果它落在尾巴上,那么它什么都不读。

UPDATE STATISTICS T WITH SAMPLE 50 PERCENT在事件探查器中跟踪呼叫显示发出以下查询

SELECT StatMan([SC0], [SB0000])
FROM   (SELECT TOP 100 PERCENT [SC0],
                               step_direction([SC0]) OVER (ORDER BY NULL) AS [SB0000]
        FROM   (SELECT [C] AS [SC0]
                FROM   [dbo].[T] TABLESAMPLE SYSTEM (5.000000e+001 PERCENT) 
                WITH (READUNCOMMITTED)) AS _MS_UPDSTATS_TBL_HELPER
        ORDER  BY [SC0],
                  [SB0000]) AS _MS_UPDSTATS_TBL
OPTION (MAXDOP 1) 

有计划

在此处输入图片说明

TABLESAMPLE SYSTEM (5.000000e+001 PERCENT)负责采样并在此处记录

TABLESAMPLE SYSTEM返回大约的行百分比,并为表中的每个8 KB物理页生成一个随机值。根据页面的随机值和查询中指定的百分比,页面将包含在样本中或排除在样本中。包含的每个页面都返回样本结果集中的所有行。

该文档还指出

尽管该计划显示执行了表扫描,但是实际上仅需要从数据文件中读取结果集中包含的那些页面。

STATMAN调用是对内部聚合函数的简要说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.