2012-07-08 4 views
0

SQL 서버에서 $PARTITION을 사용하는 목적을 분명히 이해하지 못합니까? MSDN에서 내용을 읽었지만 여전히 이해할 수는 없습니다.

어떤 이점이 있습니까?

+0

파티션 된 테이블과 관련된'$ PARTITION' 함수 (http://msdn.microsoft.com/en-us/library/ms188071.aspx)에 대한 질문이 정확합니까? 분할 된 결과 집합과 관련된 Transact-SQL의 'PARTITION BY' 절 (http://msdn.microsoft.com/en-us/library/ms176102)에 대해 묻지 않습니다. –

답변

0

파티션 테이블은 여전히 ​​하나의 테이블처럼 치료하는 동안 여러 조각으로 분할을 의미합니다. 우리는 여기에서 수평 분할에 대해 말하고 있습니다. 즉, 각 분할 영역에는 모든 열이 포함되지만 일부 열만 포함됩니다. 이를 수행하려면 파티션 컬럼에서 해당 행의 값에 따라 행이 속하는 파티션을 정의하는 파티션 함수를 정의해야합니다. $PARTITION은 행이 속한 파티션을 알려줍니다.

행의 등급을 나타내는 정수 열이 있고 사용자가 종종 4보다 높은 등급의 항목 만 요청할 것으로 예상한다고 가정 해 보겠습니다. 등급에 따라 파티션 할 수 있습니다.

다음
CREATE PARTITION FUNCTION partitionByRating (int) FOR VALUES (4); 

는 우리 테이블의 행, 우리는 쿼리 수에 속하는 파티션을 찾을 : 우리의 파티션 기능이 될 수

SELECT $partition.partitionByRating(i.Rating) AS [Partition Number], 
    rating AS [Rating], 
    name AS [Item Name] 
FROM dbo.Items AS i 

을 그리고 우리는 같은 결과를 얻을 수 있습니다 :

Partition Rating Item Name 
1   1   Ball 
1   4   Scooter 
2   5   Blaster 

볼과 스쿠터가 함께 저장되지만, 파티션을 스토리지에 할당하는 방법에 따라 Blaster가 다른 곳에 저장 될 수 있습니다.

0

이 기능을 사용하여 특정 값에 사용될 파티션 번호를 결정할 수 있습니다.

SELECT $PARTITION.PF_RangeByYear('20010701') 

당신은 또한 찾을하는 데 사용할 수 있습니다 : 예를 들어, 날짜별로 분할 된 테이블과, 이것은 당신이 테이블에 값을 삽입하기도 전에 7 월 1 일, 2001 사용되는 파티션을 알려줍니다 각 파티션 번호 행 수 : 틀림없이 당신이 sys.partitions 또는 sys.dm_db_partition_stats에서 훨씬 더 간단 할 수

SELECT $partition.PF_RangeByYear(orderdate) AS partition#, 
    COUNT(*) AS cnt 
FROM Orders 
GROUP BY $partition.PF_RangeByYear(orderdate); 

. 데이터베이스에

(Itzik's SQL Mag article here에서 가져온 이러한 예는 모두.)

관련 문제