Car WITH SAMPLE 50 PERCENT
cela fonctionne comme si pour chaque page de données du tableau, SQL Server retournait une pièce. S'il atterrit en tête, il lit toutes les lignes de la page. S'il atterrit, il n'en lit aucun.
Le suivi de l' UPDATE STATISTICS T WITH SAMPLE 50 PERCENT
appel dans le profileur montre que la requête suivante est émise
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)
Avec plan
TABLESAMPLE SYSTEM (5.000000e+001 PERCENT)
est responsable de l'échantillonnage et est documenté ici
TABLESAMPLE SYSTEM
renvoie un pourcentage approximatif de lignes et génère une valeur aléatoire pour chaque page physique de 8 Ko du tableau. En fonction de la valeur aléatoire d'une page et du pourcentage spécifié dans la requête, une page est soit incluse dans l'échantillon, soit exclue. Chaque page incluse renvoie toutes les lignes de l'exemple de jeu de résultats.
La documentation indique également
Bien que le plan montre qu'une analyse de table est effectuée, seules les pages incluses dans le jeu de résultats doivent être lues à partir du fichier de données.
L' STATMAN
appel est à une fonction d'agrégation interne brièvement décrite ici