Web开发

IT小鸟的三言两语
随笔 - 4, 文章 - 0, 评论 - 28, 引用 - 0
数据加载中……

SqlServer2005对现有数据进行分区具体步骤

RegMail是用来存放注册邮件的表,现以创建时间(CreateTime)字段来给表进行分区,具体步骤如下:


--为分区创建存储文件

ALTER DATABASE Test ADD FILEGROUP RegMailFile2007

ALTER DATABASE Test ADD FILEGROUP RegMailFile2008

ALTER DATABASE Test ADD FILEGROUP RegMailFile2009

查看数据库的文件组能看到如下图:


--为文件组设置存储文件

ALTER DATABASE Test ADD FILE (NAME = 'RegMailFile2007', FILENAME = 'E:\Data\RegMailFile2007.NDF') TO FILEGROUP RegMail2007;

ALTER DATABASE Test ADD FILE (NAME = 'RegMailFile2008', FILENAME = 'E:\Data\RegMailFile2008.NDF') TO FILEGROUP RegMail2008;

ALTER DATABASE Test ADD FILE (NAME = 'RegMailFile2009', FILENAME = 'E:\Data\RegMailFile2009.NDF') TO FILEGROUP RegMail2009;

查看数据库的存储文件能看到如下图:



--创建分区函数

CREATE PARTITION FUNCTION pf_RegMail(datetime)

AS

RANGE RIGHT FOR VALUES ( ' 20070101  00:00:00 ' ,'20080101 00:00:00')

创建完了在分区函数中可以看到刚创建好的pf_RegMail


如果创建后想对分区函数进行修改可以用如下访求 :


--修改分区函数(拆分)

alter PARTITION FUNCTION pf_RegMail()

split RANGE ('20090101 00:00:00');


--修改分区函数(合并)

ALTER PARTITION FUNCTION pf_RegMail()

MERGE RANGE ('20080101 00:00:00');

 

--创建分区方案

CREATE PARTITION SCHEME ps_RegMail

AS PARTITION pf_RegMail TO (RegMail2007,RegMail2008,RegMail2009)


如果想去分区方案进行修改

--修改分区方案

ALTER PARTITION SCHEME ps_RegMail

NEXT USED RegMail2010;

 

--创建分区表

CREATE TABLE [dbo].[PARTITIONERegMail](

 

[id] [int] IDENTITY(1,1) NOT NULL,

 

[CreateTime] [datetime] NOT NULL


 CONSTRAINT [PK_PARTITIONERegMail] PRIMARY KEY NONCLUSTERED
(
    [id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [ps_RegMail]([CreeateTime])



--此为关键步骤,将现有数据存入上面所建的文件中

ALTER TABLE [dbo].[RegMail] WITH NOCHECK ADD
CONSTRAINT [PK_RegMail] PRIMARY KEY CLUSTERED
(
[CreateTime]
) ON [ps_RegMail]([CreateTime])


--如果原来的表里有主键哪就要执行下面语句:

alter table RegEmail drop constraint PK_RegEmail--将表的主键删除


 

--查寻数据所在文件组

SELECT *, $PARTITION.[pf_RegMail](CreateTime) AS PF FROM RegEmail

 

posted on 2008-06-23 12:02 Sailor's 阅读(1492) 评论(12)  编辑 收藏

评论

#1楼    回复  引用  查看    

没研究过 看得模模糊糊
2008-06-23 13:14 | peace      

#2楼    回复  引用    

呵呵.能对已经存在的数据库进行分区吗?
也就是.数据库已经存在几百万条数据,可否?
2008-06-23 13:20 | 小Q Q [未注册用户]

#3楼    回复  引用  查看    

@小Q Q
不能。
这种数据库分区是硬件方式的分区方式,配合磁盘阵列可以提高数据库响应性能。在数据库设计的时候就要考虑。
如果是已有数据,想追加分区,恐怕不行,可以为以后的数据做分区
2008-06-23 13:54 | jillzhang      

#4楼    回复  引用    

性能的提高究竟有多少?
如果不按分区索引字段来查询是不是要比不分区慢?
2008-06-23 14:09 | Tker [未注册用户]

#5楼 [楼主]   回复  引用  查看    

@Tker
如果是用索引字段来查寻,性能提高是非常可观,不按分区索引字段来查询,也不会比不分区慢,性能还是有提升的.
具体的原理可以看看这篇文章:
http://www.cnblogs.com/long2006sky/articles/935297.html
2008-06-23 14:23 | Sailor's      

#6楼 [楼主]   回复  引用  查看    

@小Q Q
可以对已有数据进行分区
2008-06-23 14:25 | Sailor's      

#7楼    回复  引用  查看    

webcast有一期有具体的视频
2008-06-23 14:43 | hxm      

#8楼    回复  引用    

注册sqlserver服务器。

#9楼    回复  引用  查看    

友情顶一下。
ps:分区表的设计最好放在不同磁盘上才能发挥分区的最大威力
2008-06-23 20:04 | PerfectDesign      

#10楼    回复  引用  查看    

不知道干什么的...看来俺落伍了...
2008-06-23 20:44 | airwolf2026      

#11楼    回复  引用  查看    

sql server知道一些,但是并没有实际用过。谢谢楼主分享
2008-06-24 00:29 | 深蓝      

#12楼    回复  引用  查看    

@jillzhang
如果数据库里面存放了大量的照片数据导致硬盘分区满了,能否把数据分到另一个硬盘分区上面啊?
2008-06-24 18:07 | 赵俊      

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-06-23 12:10 编辑过