请教分区的一样问题
有一表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
*/