Для WITH SAMPLE 50 PERCENT
це працює , як якщо б для кожної сторінки даних в таблиці SQL Server підкидає монету. Якщо він висаджує голови, то він читає всі рядки на сторінці. Якщо він висаджує хвости, то він не читає жодного.
Відстеження UPDATE STATISTICS T WITH SAMPLE 50 PERCENT
дзвінка в Profiler показує, що подається наступний запит
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 КБ у таблиці. Виходячи з випадкового значення сторінки та відсотка, визначеного в запиті, сторінка або включена до вибірки, або виключена. Кожна сторінка, яка включена, повертає всі рядки у вибірковому наборі результатів.
У документації також зазначено
Хоча план показує, що виконується сканування таблиці, з файлу даних потрібно прочитати лише ті сторінки, які включені до набору результатів.
STATMAN
Виклик на внутрішній агрегатна функція коротко описані тут