'분할테이블'에 해당하는 글 1건

참고 사이트


http://msdn.microsoft.com/ko-kr/library/ms345146(SQL.90).aspx



-------------------------------------------------------------------------------------------------------------------------------


-- testDB 데이터베이스를 만든 후


USE testDB

go


-- 1) 파일그룹 생성

Alter database testDB add FILEGROUP fg1

Alter database testDB add FILEGROUP fg2

Alter database testDB add FILEGROUP fg3

Alter database testDB add FILEGROUP fg4


alter database testDB add file

(NAME = data1

 , filename = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\test1.ndf'

 , size = 1mb

 , maxsize = 100mb

 , filegrowth=1mb) to filegroup fg1


alter database testDB add file

(NAME = data2

 , filename = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\test2.ndf'

 , size = 1mb

 , maxsize = 100mb

 , filegrowth=1mb) to filegroup fg2


alter database testDB add file

(NAME = data3

 , filename = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\test3.ndf'

 , size = 1mb

 , maxsize = 100mb

 , filegrowth=1mb) to filegroup fg3


alter database testDB add file

(NAME = data4

 , filename = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\test4.ndf'

 , size = 1mb

 , maxsize = 100mb

 , filegrowth=1mb) to filegroup fg4




-- 2) PARTITION FUNCTION 생성

CREATE PARTITION FUNCTION CalenderPF(NVARCHAR(4))

AS RANGE LEFT FOR VALUES ('4월', '7월', '10월')



-- 3) PARTITION SCHEME 생성

CREATE PARTITION SCHEME CalenderPS

AS PARTITION CalenderPF

TO (fg1, fg2, fg3, fg4)



-- 4) 파티션 테이블 생성

CREATE TABLE TestCalender

(Seq INT,

Month NVARCHAR(4)) ON CalenderPS(Month)



INSERT INTO TestCalender VALUES (1, '2월')

INSERT INTO TestCalender VALUES (1, '4월')

INSERT INTO TestCalender VALUES (1, '6월')

INSERT INTO TestCalender VALUES (1, '8월')

INSERT INTO TestCalender VALUES (1, '12월')



SELECT Month, $partition.CalenderPF(Month) FROM TestCalender



SELECT * FROM TestCalender

WHERE $partition.CalenderPF(Month) = 2




[참조] http://wizcody.co.kr/43   <- 사이트의 내용을 바탕으로 테스트 해보았습니다.




/* 생성된 분할(파티션)테이블에서 추가적으로 파티션구성을 수정하는 내용 */


-- 1) 파일그룹 생성

Alter database testDB add FILEGROUP fg5


Alter database testDB add file

(NAME = data5

 , filename = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\test5.ndf'

 , size = 1mb

 , maxsize = 100mb

 , filegrowth=1mb) to filegroup fg5


-- 2) PARTITION SCHEME 수정

ALTER PARTITION SCHEME CalenderPS

NEXT USED fg5;


-- 3) PARTITION FUNCTION 수정

ALTER PARTITION FUNCTION CalenderPF ()

SPLIT RANGE ('11월');


이렇게 하면 구성은 되지만 데이터상 '11월', '12월'이 내가 생각하는 결과값으로 보여지지 않는다. 그래서 '201201' 이렇게 연산가능한 데이터로 수정해서

다시 테스트 해야할 것 같다.




아래와 같이 다시 테스트 해 보았다.


-- 1. PARTITION FUNCTION

DROP PARTITION FUNCTION PF01; -- 삭제

CREATE PARTITION FUNCTION PF01(NVARCHAR(8))

AS RANGE LEFT FOR VALUES ('20120101', '20120301', '20120501', '20120701')


-- 2. PARTITION SCHEME(파티션 구성표)

DROP PARTITION SCHEME PS01; -- 삭제

CREATE PARTITION SCHEME PS01

AS PARTITION PF01

TO (fg1, fg2, fg3, fg4, fg5)


/* => 만약 PARTITION FUNCTION을 삭제 하고자 한다면 PARTITION SCHEME을 먼저 삭제하고 난 뒤 PARTITION FUNCTION 을 삭제해야함

그렇지 않으면 '하나 이상의 파티션 구성표에서 파티션 함수 'PF01'을(를) 사용하고 있습니다.' 와 같은 에러 출현 */


-- 3. 파티션 테이블 생성

CREATE TABLE dbo.PartionTable

(seq INT,

date NVARCHAR(8)) ON PS01(date)


-- 4. 테스트 데이터 입력

insert into dbo.PartionTable values (001, '20120101')

insert into dbo.PartionTable values (002, '20120102')

insert into dbo.PartionTable values (003, '20120103')

insert into dbo.PartionTable values (004, '20120105')

insert into dbo.PartionTable values (005, '20120203')

...


insert into dbo.PartionTable values (448, '20121009')

insert into dbo.PartionTable values (449, '20121009')

insert into dbo.PartionTable values (450, '20121009') -- 총 450건 입력


-- 5. 비교를 위해 파티션 테이블이 아닌 테스트용 테이블을 만든다.

create table PartionTable1

(

seq int,

date varchar(8)

)


그리고 똑같이 450 건 insert를 한다.


-- 6. 각각 INDEX를 생성한다.

create index ix01 on dbo.PartionTable(date)

create index ix01 on dbo.PartionTable1(date)


-- 7. 조회 테스트

SELECT * FROM dbo.PartionTable where date like '201202%' -- index를 탄다.

SELECT * FROM dbo.PartionTable1 where date like '201202%' -- Table Scan한다.







WRITTEN BY
테네시왈츠
항상 겸손하게 항상 새롭게 항상 진실하게

,