读书人

请问分区的一样有关问题

发布时间: 2013-11-16 23:15:33 作者: rapoo

请教分区的一样问题
有一表UserBill(BusinessDate char(6), F1 varchar(100), F2 Varchar(100),F……)
其中BusinessDate根据每个月份的数据,分别存入日期(年月),例如 201309,201310……
由于每月增加约800万条的数据

考虑使用分区技术,现在问题有两个。

1.分区函数如何利用这个BusinessDate来建立(即每个月份的数据分别存到一个分区文件)
2.之前我是在BusinessDate建立聚集索引,那么现在分区了(即每个区里面的BusinessDate肯定都一样的了),还需要在BusinessDate建立索引吗?

谢谢!
[解决办法]
1.
分区函数

create partition function wcLeftRange(char(6))
as range left for values('201309','201310','201311')
[解决办法]
做了一个实验,你看看:



--1.创建数据库
create database wc
on primary
(
name = wc_data,
filename = 'D:\wc_data.mdf'
)
log on
(
name = wc_log1,
filename = 'd:\wc_log1.ldf'
),
(
name = wc_log2,
filename = 'd:\wc_log2.ldf'
)


--2.增加文件组
alter database wc
add filegroup wc_fg1

alter database wc
add filegroup wc_fg2

alter database wc
add filegroup wc_fg3

alter database wc
add filegroup wc_fg4

--3.把文件添加到文件组中
alter database wc
add file
(
name = wc_fg1_1,
filename = 'd:\wc_fg1_1.ndf',
size = 1MB
)
to filegroup wc_fg1

alter database wc
add file
(
name = wc_fg2_1,
filename = 'd:\wc_fg2_1.ndf',
size = 1MB
)
to filegroup wc_fg2

alter database wc
add file
(
name = wc_fg3_1,
filename = 'd:\wc_fg3_1.ndf',
size = 1MB
)
to filegroup wc_fg3

alter database wc
add file
(
name = wc_fg4_1,
filename = 'd:\wc_fg4_1.ndf',
size = 1MB
)
to filegroup wc_fg4

go


use wc
go

--4.创建分区函数,3个值,但是会有4个分区
create partition function wcLeftRange(char(6))
as range left for values('201309','201310','201311')



--5.创建分区方案,4个文件组
create partition scheme wcLeftRangeScheme
as partition wcLeftRange
to (wc_fg1,wc_fg2,wc_fg3,wc_fg4)



--6.建表,聚集索引,插入数据
create table temp_UserBill
(
BusinessDate char(6), F1 varchar(100), F2 Varchar(100)
)

create clustered index idx_temp_UserBill on temp_UserBill(BusinessDate)


insert into temp_UserBill
select '201309','aa1','bb1' union all
select '201309','aa2','bb2' union all
select '201310','aa1','bb1' union all
select '201310','aa2','bb2' union all
select '201311','aa1','bb1' union all
select '201311','aa2','bb2' union all
select '201312','aa','bb'

go


--7.要转化为分区表,必须要删除聚集索引
drop index idx_temp_UserBill on temp_UserBill


--8.然后再重新建立一个聚集索引,并且指定:分区方案和分区字段
create clustered index idx_temp_UserBill on temp_UserBill(BusinessDate)
on wcLeftRangeScheme(BusinessDate)


--9.查询表中的数据,是在那个分区里
select *,

--$partition函数,后面是分区函数名称,列名称,显示了这条数据是在第几个分区
$partition.wcLeftRange(BusinessDate) as partition
from temp_UserBill
/*
BusinessDateF1F2partition
201309 aa1bb11
201309 aa2bb21


201310 aa1bb12
201310 aa2bb22
201311 aa1bb13
201311 aa2bb23
201312 aabb4
*/

读书人网 >SQL Server

热点推荐