Denn WITH SAMPLE 50 PERCENT
es funktioniert so, als würde SQL Server für jede Datenseite in der Tabelle eine Münze werfen. Wenn es Köpfe landet, liest es alle Zeilen auf der Seite. Wenn es Schwänze landet, liest es keine.
Wenn Sie den UPDATE STATISTICS T WITH SAMPLE 50 PERCENT
Anruf im Profiler verfolgen, wird die folgende Abfrage ausgegeben
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)
Mit Plan
TABLESAMPLE SYSTEM (5.000000e+001 PERCENT)
ist für die Probenahme verantwortlich und wird hier dokumentiert
TABLESAMPLE SYSTEM
Gibt einen ungefähren Prozentsatz der Zeilen zurück und generiert einen zufälligen Wert für jede physische 8-KB-Seite in der Tabelle. Basierend auf dem Zufallswert für eine Seite und dem in der Abfrage angegebenen Prozentsatz wird eine Seite entweder in die Stichprobe aufgenommen oder ausgeschlossen. Jede enthaltene Seite gibt alle Zeilen in der Beispielergebnismenge zurück.
In der Dokumentation heißt es auch
Obwohl der Plan zeigt, dass ein Tabellenscan durchgeführt wird, müssen nur die Seiten, die in der Ergebnismenge enthalten sind, tatsächlich aus der Datendatei gelesen werden.
Der STATMAN
Aufruf erfolgt an eine interne Aggregatfunktion, die hier kurz beschrieben wird