Quando o SQL Server cria estatísticas de amostra , como a porcentagem de amostragem é calculada?
Por exemplo, atualizando estatísticas na coluna PostId da tabela dbo.Votes no banco de dados Stack Overflow 2013:
UPDATE STATISTICS dbo.Votes
(
_WA_Sys_00000002_0AD2A005
)
WITH MAXDOP = 1;
O SQL Server cria uma instrução interna:
SELECT
StatMan
(
[SC0],
[SB0000]
)
FROM
(
SELECT TOP 100 PERCENT
[SC0],
step_direction([SC0]) over (order by NULL) AS [SB0000]
FROM
(
SELECT [PostId] AS [SC0]
FROM [dbo].[Votes]
TABLESAMPLE SYSTEM (9.234204e-01 PERCENT)
WITH (READUNCOMMITTED)
) AS _MS_UPDSTATS_TBL_HELPER
ORDER BY
[SC0],
[SB0000]
) AS _MS_UPDSTATS_TBL
OPTION (MAXDOP 1)
De onde vem 9.234204e-01 PERCENT
?
A porcentagem de amostragem é derivada do número de linhas na tabela e do número de páginas de nível folha no índice escolhido para a coleta de estatísticas. Este 'índice' geralmente será a tabela base (índice clusterizado ou heap).
Esses dois parâmetros de entrada podem ser obtidos de um DMV:
O cálculo é:
Isso retorna:
O que corresponde ao
9.234204e-01 PERCENT
dado na pergunta.