Як працює вибірка при оновленні статистики?


10

У мене є кілька масивних столів. Я хотів би переконатися, що їх статистика оновлюється за допомогою плану щотижневого обслуговування.

Однак це займає занадто багато часу.

Якщо я вкажу

WITH SAMPLE 50 PERCENT

робить SQL Server тоді вибірку:

  1. перші 50% сторінок
  2. кожна інша сторінка
  3. чи якась інша стратегія?

З цього питання BOL не зрозуміла.

Відповіді:


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Виклик на внутрішній агрегатна функція коротко описані тут

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.