数据库表分区

create database mytest
on


/*
SQL SERVER 数据库表分区由三个步骤来完成:
1.创建分区函数
2.创建分区架构
3.对表进行分区
*/

--1.0创建表分区函数
create partition function myPartFunc(int)
as range right 
for values(
100000
,200000
,300000
,400000	
,500000	
,600000	
,700000		
)

/*
这些分割界线指定了四个分区。第一个分区包含所有值小于100000的记录。
第二个分区包含所有值在100000和200000之间的记录。
而第三个分区包含所有值在200000和300000之间的记录。
注意这个例子中使用了“RANGE RIGHT”从句。这说明分界值是在分区的右边。
同样,如果使用的是“RANGE LEFT”从句,
那么第一个分区就会包含所有值小于或等于250000的记录;
第二个分区就会包含所有值在250001和500000之间的记录,如此类推。 
*/

--2.创建分区架构  上一步是完成一个概念上的分区,接下来要完成一个物理的构建,
--使得属于不同分区的数据存储到不同的物理文件上去.  
/*创建文件组*/
ALTER DATABASE mytest ADD FILEGROUP [party100000]  
ALTER DATABASE mytest ADD FILEGROUP [party200000]  
ALTER DATABASE mytest ADD FILEGROUP [party300000]  
ALTER DATABASE mytest ADD FILEGROUP [party400000]
ALTER DATABASE mytest ADD FILEGROUP [party500000]  
ALTER DATABASE mytest ADD FILEGROUP [party600000]  
ALTER DATABASE mytest ADD FILEGROUP [party700000] 
/*创建物理文件,在这里,为了方便起见,
我把每个物理文件放到了一个单独的文件组里面.  注意这里需要自己建立文件夹的 
*/   
ALTER DATABASE mytest  
ADD FILE   
(NAME = N'party100000',FILENAME = N'D:\sqlserverTest\partitiontable\p100000\party100000.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB)  
TO FILEGROUP [party100000] 

ALTER DATABASE mytest  
ADD FILE   
(NAME = N'party200000',FILENAME = N'D:\sqlserverTest\partitiontable\p200000\party200000.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB)  
TO FILEGROUP [party200000] 

ALTER DATABASE mytest  
ADD FILE   
(NAME = N'party300000',FILENAME = N'D:\sqlserverTest\partitiontable\p300000\party300000.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB)  
TO FILEGROUP [party300000] 

ALTER DATABASE mytest  
ADD FILE   
(NAME = N'party400000',FILENAME = N'D:\sqlserverTest\partitiontable\p400000\party400000.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB)  
TO FILEGROUP [party400000] 

ALTER DATABASE mytest  
ADD FILE   
(NAME = N'party500000',FILENAME = N'D:\sqlserverTest\partitiontable\p500000\party500000.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB)  
TO FILEGROUP [party500000] 

ALTER DATABASE mytest  
ADD FILE   
(NAME = N'party600000',FILENAME = N'D:\sqlserverTest\partitiontable\p600000\party600000.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB)  
TO FILEGROUP [party600000] 

ALTER DATABASE mytest  
ADD FILE   
(NAME = N'party700000',FILENAME = N'D:\sqlserverTest\partitiontable\p700000\party700000.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB)  
TO FILEGROUP [party700000] 
/*创建完分区函数,接下来就要建立分区架构,用来将概念上的分区和文件组(物理文件)关联起来.  
*/

CREATE PARTITION SCHEME [myPartFuncRangePScheme]  
AS  
PARTITION myPartFunc TO  
( 
[party100000],
[party200000],
[party300000],
[party400000],
[party500000],
[party600000],
[party700000],
[PRIMARY] 
)  
GO    



--3.0 分区表的基础架构到此就完成了,接下来就要建立分区表了.  

CREATE TABLE [dbo].myPartyTable(  
  id int identity(1,1),
  PartyId int,
  Name varchar(10)
) ON myPartFuncRangePScheme(PartyId)  

/*添加 聚焦索引 提高查询效率*/
ALTER TABLE myPartyTable  
ADD CONSTRAINT [myPartyTable_PK]  
PRIMARY KEY CLUSTERED ([id], [PartyId])  
GO   


/*插入测试数据*/
insert into myPartyTable values(10,'Na1')
insert into myPartyTable values(100000,'Na1')
insert into myPartyTable values(200000,'Na1')
insert into myPartyTable values(300000,'Na1')
insert into myPartyTable values(400000,'Na1')
insert into myPartyTable values(400001,'Na1')
select * from myPartyTable
/*查询所在分区表*/
select $partition.myPartFunc(PartyId),PartyId,*  
from myPartyTable a  
order by a.PartyId asc    
/*查询每个分区的行数*/
SELECT $PARTITION.myPartFunc(PartyId) AS Partition
,COUNT(0) AS [COUNT]
 FROM myPartyTable 
 GROUP BY $PARTITION.myPartFunc(PartyId) 
 ORDER BY Partition  







 

 
原文地址:https://www.cnblogs.com/dingdingmao/p/3146529.html