SQL Server 2005에 새로 도입된 TABLESAMPLE 은 SELECT 결과 집합을 샘플링으로 퍼센트, 행의수로 결과를 도출해 낼수 있습니다.. 즉 모든 데이터를 처리할 필요가 없거나, 정확한 결과가 아닌 대략적인 결과를 필요로 하는 경우에 사용 할 수 있습니다.
구문 형식
TABLESAMPLE [SYSTEM] (sample_number [ PERCENT | ROWS ] )
[ REPEATABLE (repeat_seed) ]
SYSTEM 옵션
SYSTEM은 ANSI SQL 구현에 종속적인 샘플링 방법을 지정합니다. SYSTEM 옵션은 선택 사항이지만 SQL Server 2005에서 사용할 수 있는 유일한 샘플링 방법이며 기본적으로 적용됩니다.
TABLESAMPLE SYSTEM은 행의 대략적인 백분율을 반환하며 테이블에서 각 8KB의 실제 페이지에 대해 임의 값을 생성합니다. 페이지에 대한 임의 값과 쿼리에서 지정한 비율을 기준으로 샘플에 페이지가 포함되거나 제외됩니다. 포함된 각 페이지는 샘플 결과 집합에 모든 행을 반환합니다. 예를 들어 TABLESAMPLE SYSTEM 10 PERCENT
로 지정하면 SQL Server에서는 지정된 테이블의 데이터 페이지 중 약 10%에 해당하는 행이 반환됩니다. 테이블의 페이지에 행이 균일하게 분산되어 있고 테이블의 페이지 수가 충분한 경우 반환되는 행의 수는 요청한 샘플 크기와 거의 동일합니다. 그러나 각 페이지에 대해 생성되는 임의 값은 다른 페이지에 대해 생성되는 값과는 별개이므로 반환되는 페이지의 비율이 요청한 비율보다 크거나 작을 수 있습니다. TOP(n) 연산자를 사용하여 행의 수를 지정된 최대값으로 제한할 수 있습니다.
테이블의 전체 행 수를 기준으로 비율을 지정하는 대신 여러 행을 지정하면 이 행 수는 결국 반환되어야 할 페이지인 행의 비율로 변환됩니다. 그러면 이 계산된 비율에 따라 TABLESAMPLE 작업이 수행됩니다.
테이블이 단일 페이지로 구성되어 있으면 페이지의 모든 행이 반환되거나 아무 행도 반환되지 않습니다. 이 경우 TABLESAMPLE SYSTEM은 페이지의 행 수에 관계없이 페이지에서 100% 또는 0%에 해당하는 행만 반환할 수 있습니다.
특정 테이블에 TABLESAMPLE SYSTEM을 사용하면 실행 계획에서 해당 테이블에 대한 테이블 검색(힙 검색 또는 클러스터형 인덱스 검색) 사용이 제한됩니다. 실행 계획에서 테이블 검색이 수행되는 것으로 표시되더라도 실제로는 데이터 파일에서 결과 집합에 포함된 페이지만 읽어야 합니다.
REPEATABLE 옵션
REPEATABLE 옵션을 사용하면 선택한 샘플이 다시 반환됩니다. REPEATABLE에 동일한 repeat_seed 값을 지정하면 테이블을 변경하지 않는 한 SQL Server에서는 동일한 행 하위 집합이 반환됩니다. REPEATABLE에 다른 repeat_seed 값을 지정하면 SQL Server에서 테이블의 다른 행 샘플이 반환될 가능성이 있습니다. 이 경우 테이블을 변경하는 것으로 간주되는 작업으로는 삽입, 업데이트, 삭제, 인덱스 다시 작성, 인덱스 조각 모음, 데이터베이스 복원 및 데이터베이스 연결 등이 있습니다.
자 이제 어떤식으로 사용 되는지 알아 보도록 하겠습니다.
SELECT * FROM Sales.SalesOrderDetail TABLESAMPLE (1000 ROWS)
실행 |
총Row |
1 |
1288 |
2 |
658 |
3 |
806 |
4 |
1232 |
5 |
1064 |
이처럼 실행를 계속 해보면서 결과값의 총 Row 를 확인해보면 정확히 1000 Rows 의 결과값을
도출해 낼수 없습니다.
SELECT TOP 250 * FROM Sales.SalesOrderDetail TABLESAMPLE (1000 ROWS)
말그대로 샘플링 데이터이기 때문에 특정한 Row 개수를 요구 한다면 Top 절을 이용하여
사용 할수 있습니다.
SELECT TOP 10 * FROM Sales.SalesOrderDetail TABLESAMPLE (1000 ROWS)
SalesOrderID 결과 | ||||
실행1 |
실행2 |
실행3 |
실행4 |
실행5 |
47967 |
50208 |
43850 |
44311 |
44127 |
이처럼 실행을 몇번 해보면 할때마다 다른 값들이 출력이 되게 됩니다.
SELECT TOP 10 * FROM Sales.SalesOrderDetail TABLESAMPLE (1000 ROWS) REPEATABLE (25)
실행시마다 다른 샘플링을 가져 오게 되기 때문에 REPEATABLE 옵션을 통해 출력시 같은 데이터가 출력 되도록 할수 있습니다.
참고 : MSDN
'MSSQL > SQL Server 2005 new Feature' 카테고리의 다른 글
TRIGGER 고찰 (0) | 2009.11.19 |
---|---|
VARCHAR(MAX) (2) | 2009.11.13 |
이런 T-SQL도 있다!! - APPLY활용, PIVOT & UNPIVOT (3) | 2009.11.05 |
OUTPUT 절 (insert,update,delete) (1) | 2009.10.30 |
RANK()함수를 활용하자! - 향샹된 순위함수(분석함수) 알아보기 (2) | 2009.10.29 |