最近开发一个手机用户统计平台,因为涉及到数据庞大,不得不以一周为单位对统计报表进行分区,所以记录一下,方便以后查看

第一步创建文件分组

对于文件分组共创建了14个,从 xy_group_20141025 到 xy_group_20150125, 下面是最后一个分组,

ADD FILEGROUP xy_group_20150125
GO
ALTER DATABASE xiangyue_pt
ADD FILE
(
NAME = 'xy_20150125',
FILENAME = 'C:\xiangyue_pt\xy_20150125.ndf',
SIZE = 5120 KB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 5120 KB
)TO FILEGROUP xy_group_20150125
GO

第二步创建分区函数 参数是日期的时间戳

这里Range定义的范围可以是RIGHT或LEFT,我们这里使用的范围是RIGHT,RIGHT表明是<或>=,LEFT表明是<=或>。即<1414252799是一个区,>=1414252799并且<1414857599是一个区......>=1422201599是一个分区,这里相当于分了15个段的分区。

CREATE PARTITION FUNCTION XY_Function (INT)

AS RANGE RIGHT FOR VALUES (
1414252799
,1414857599
,1415462399
,1416067199
,1416671999
,1417276799
,1417881599
,1418486399
,1419091199
,1419695999
,1420387199
,1420991999
,1421596799
,1422201599) GO

第三步创建分区方案 将创建的分区函数映射到文件组,文件组对应磁盘上的物理数据库文件。

CREATE PARTITION SCHEME XY_Scheme

AS PARTITION XY_Function

TO([PRIMARY],xy_group_20141025, xy_group_20141101, xy_group_20141108, xy_group_20141115, xy_group_20141122, xy_group_20141129, xy_group_20141206, xy_group_20141213, xy_group_20141220, xy_group_20141227, xy_group_20150104, xy_group_20150111, xy_group_20150118, xy_group_20150125)

GO

第四步创建表,然后把表链接到分区方案, 使用[date]作为分区列。

CREATE TABLE [dbo].[reportbak](
[id] [int] IDENTITY(1,1) NOT NULL,
[aid] [int] NOT NULL,
[phoneModel] [varchar](100) NULL,
[macAddress] [varchar](20) NOT NULL,
[installTime] [int] NULL,
[position] [varchar](200) NULL,
[ip] [varchar](20) NULL,
[xiangyueId] [int] NULL,
[phoneNumber] [varchar](20) NULL,
[uninstallTime] [int] NULL,
[publish] [bit] NULL,
[solve] [bit] NULL,
[perfectPhoto] [bit] NULL,
[isEffective] [bit] NULL,
[isDeduction] [int] NULL,
[onlineTimes] [int] NULL,
[weekdays] [int] NULL,
[date] [int] NULL,
)
on XY_Scheme([date])
go

分区完毕,这时你可以对表设置主键,索引等

select * FROM sys.partitions
WHERE OBJECT_NAME(OBJECT_ID)='report'

查询下各个分区对应的数据量。

MS SQL 2012表分区-LMLPHP

 SELECT *, $PARTITION.XY_Function(date) as '所在分区'
FROM report

MS SQL 2012表分区-LMLPHP

至此以上是对表分区的大致方法,可能还有不当之处,其实这些方法我想大家都知道,没什么技术含量,我只是想记录一下罢了,作为一名菜鸟我想是需要的!

05-11 10:53
查看更多