거대한 테이블이 몇 개 있습니다. 주간 유지 보수 계획을 통해 통계를 최신 상태로 유지하고 싶습니다.
그러나 그렇게하는 데 너무 많은 시간이 걸립니다.
내가 지정하면
WITH SAMPLE 50 PERCENT
그런 다음 SQL Server는 다음을 샘플링합니다.
- 페이지의 첫 50 %
- 다른 모든 페이지
- 아니면 다른 전략?
BOL 은 이것에 대해 명확하지 않습니다.
답변
를 들어 WITH SAMPLE 50 PERCENT
SQL Server가 동전을 뒤집 테이블의 각 데이터 페이지에 대한 것처럼 작동합니다. 헤드에 도달하면 페이지의 모든 행을 읽습니다. 꼬리가 떨어지면 아무것도 읽지 않습니다.
UPDATE STATISTICS T WITH SAMPLE 50 PERCENT
프로파일 러 에서 호출을 추적하면 다음 쿼리가 생성됩니다.
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
대략적인 행 백분율을 반환하고 테이블의 각 실제 8KB 페이지에 대해 임의의 값을 생성합니다. 페이지의 임의 값과 쿼리에 지정된 백분율에 따라 페이지가 샘플에 포함되거나 제외됩니다. 포함 된 각 페이지는 샘플 결과 세트의 모든 행을 리턴합니다.
이 문서에는 또한
계획에 테이블 스캔이 수행 된 것으로 표시되지만 결과 세트에 포함 된 페이지 만 실제로 데이터 파일에서 읽어야합니다.
STATMAN
내부에 집합 함수 호출은 간단히 설명 여기