Saturday, March 21, 2009

HOW TO CREATE PARTITION

create database partitiontest on
primary
(
name = db_dat,
filename = 'c:\test\db.mdf',size = 2mb
)
,filegroup fg1
(
name = fg1_dat,filename = 'c:\test\fg1.ndf',size=2mb
)
,filegroup fg2
(
name = fg2_dat,filename='c:\test\fg2.ndf',size = 2mb
)
,filegroup fg3
(
name = fg3_dat,filename='c:\test\fg3.ndf',size = 2mb
)
,filegroup fg4
(
name = fg4_dat,filename='c:\test\fg4.ndf',size = 2mb
)
log on
(
name = db_log,
filename = 'c:\test\log.ndf',size = 2mb,filegrowth = 10%
);

CREATE PARTITION FUNCTION

CREATE PARTITION FUNCTION partfunc (int) AS
RANGE LEFT FOR VALUES(1000,2000)

SELECT * FROM SYS.PARTITION_RANGE_VALUES

CREATE PARTITION SCHEME Partscheme AS
PARTITION partfunc to
(
[fg1],[fg2],[fg3]
)

select * from sys.partition_schemes


CREATE PARTITION TABLE

create table t1
(
id int
,v char(1000) default 'aaaa'
,constraint ci_t1_id primary key clustered (id)
) on partscheme(id);


SELECT * FROM SYS.PARTITIONS WHERE OBJECT_ID = OBJECT_ID('dbo.t1')

Query partition

SELECT $partition.partfunc(id) as partitionNum,count(*) as NumRows
FROM t1 GROUP BY $Partition.partfunc(id) ORDER BY $Partition.partfunc(id)


SELECT $partition.partfunc(4000) as partitionNum

Get all records in partition 2

SELECT * FROM T1 WHERE $partition.partfunc(id) = 2

1 comments:

Anonymous said...

this one is too good.. thanks a lot for helping me out in table partitioning..