首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请问分区的一样有关问题

2013-11-16 
请教分区的一样问题有一表UserBill(BusinessDate char(6), F1 varchar(100), F2 Varchar(100),F……)其中Bus

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

热点排行