Как работает выборка при обновлении статистики?

10

У меня есть несколько массивных столов. Я хотел бы убедиться, что их статистика актуальна с помощью еженедельного плана обслуживания.

Однако это занимает слишком много времени.

Если я укажу

WITH SAMPLE 50 PERCENT

SQL Server тогда пример:

  1. первые 50% страниц
  2. каждая вторая страница
  3. или какая-то другая стратегия?

BOL не ясно по этому вопросу.

Nik
источник

Ответы:

16

Для 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Вызов на внутренний агрегатная функция кратко описаны здесь

Мартин Смит
источник