SQL Server表分区


----------------------------------------创建分区表Start

--分区函数
CREATE PARTITION FUNCTION partfunBfq (datetime)   
AS RANGE RIGHT FOR VALUES ('20110101','20120101','20130101','20140101','20150101') 


--分区方案
CREATE PARTITION SCHEME partschBfq 
AS PARTITION partfunBfq   
TO (   
    BFQ2011,   
    BFQ2012,   
    BFQ2013,   
    BFQ2014,   
    BFQ2015,
BFQ2016
)  




--创建表
CREATE TABLE BFQ_TEST(   
[Id] [int] IDENTITY(1,1) NOT NULL,   
[Name] [varchar](16) NOT NULL,   
[BfqTime][datetime] NOT NULL   
) ON partschBfq([BfqTime]) 


CREATE TABLE BFQ_TEST_A(   
[Id] [int] IDENTITY(1,1) NOT NULL,   
[Name] [varchar](16) NOT NULL,   
[BfqTime][datetime] NOT NULL   
) ON partschBfq([BfqTime]) 


--向表中插入数据
insert into BFQ_TEST_A values('测试一','2010-01-01 00:00:00');
insert into BFQ_TEST_A values('测试二','2011-01-01 00:00:00');
insert into BFQ_TEST_A values('测试三','2012-01-01 00:00:00');
insert into BFQ_TEST_A values('测试四','2013-01-01 00:00:00');
insert into BFQ_TEST_A values('测试五','2014-01-01 00:00:00');
insert into BFQ_TEST_A values('测试六','2015-01-01 00:00:00');
insert into BFQ_TEST_A values('测试七','2016-01-01 00:00:00');


--查询所有分区表数据
select * from BFQ_TEST;


--查询数据在那个分区
select $PARTITION.partfunBfq ('2010-10-1');
select $PARTITION.partfunBfq ('2011-10-1');
select $PARTITION.partfunBfq ('2012-10-1');
select $PARTITION.partfunBfq ('2013-10-1');
select $PARTITION.partfunBfq ('2014-10-1');
select $PARTITION.partfunBfq ('2015-10-1');
select $PARTITION.partfunBfq ('2016-10-1');


--查询各个分区内的内容
select * from BFQ_TEST where $PARTITION.partfunBfq(BfqTime)=1;
select * from BFQ_TEST where $PARTITION.partfunBfq(BfqTime)=2;
select * from BFQ_TEST where $PARTITION.partfunBfq(BfqTime)=3;
select * from BFQ_TEST where $PARTITION.partfunBfq(BfqTime)=4;
select * from BFQ_TEST where $PARTITION.partfunBfq(BfqTime)=5;
select * from BFQ_TEST where $PARTITION.partfunBfq(BfqTime)=6;


--统计每个物理分区表中的记录数
select $PARTITION.partfunBfq(BfqTime) as 分区编号, * from BFQ_TEST;
select $PARTITION.partfunBfq(BfqTime) as 分区编号,count(Id) as 记录数 from BFQ_TEST group by $PARTITION.partfunBfq(BfqTime);


--统计所有分区中的记录总数
select $PARTITION.partfunBfq(BfqTime) as 分区编号,count(Id) as 记录数 from BFQ_TEST group by $PARTITION.partfunBfq(BfqTime);


update BFQ_TEST set BfqTime = '2010-01-01 00:00:00' where name = '测试七';


----------------------------------------创建分区表END


----------------------------------------将普通表转换成分区表Start


--删除表
drop table BFQ_TEST_A;


--新建一个普通的数据表  
CREATE TABLE BFQ_TEST_A(  
    [Id] [int] IDENTITY(1,1) NOT NULL,          --自动增长  
    [Name] [varchar](16) NOT NULL,  
    [Time] [datetime] NOT NULL,  
    CONSTRAINT [PK_BFQ_TEST_A] PRIMARY KEY CLUSTERED  --创建主键  
    (  
        [Id] ASC  
    )  
)  


--向表中插入数据
insert into BFQ_TEST_A values('测试1',  '2010-01-01 00:00:00');
insert into BFQ_TEST_A values('测试2',  '2011-01-01 00:00:00');
insert into BFQ_TEST_A values('测试3',  '2011-01-01 00:00:00');
insert into BFQ_TEST_A values('测试4',  '2012-01-01 00:00:00');
insert into BFQ_TEST_A values('测试5',  '2013-01-01 00:00:00');
insert into BFQ_TEST_A values('测试6',  '2013-01-01 00:00:00');
insert into BFQ_TEST_A values('测试7',  '2014-01-01 00:00:00');
insert into BFQ_TEST_A values('测试8',  '2014-01-01 00:00:00');
insert into BFQ_TEST_A values('测试9',  '2015-01-01 00:00:00');
insert into BFQ_TEST_A values('测试10', '2015-01-01 00:00:00');
insert into BFQ_TEST_A values('测试11', '2016-01-01 00:00:00');
insert into BFQ_TEST_A values('测试12', '2016-01-01 00:00:00');
insert into BFQ_TEST_A values('测试13', '2017-01-01 00:00:00');


--删掉主键  
ALTER TABLE BFQ_TEST_A DROP constraint PK_BFQ_TEST_A


--创建主键,但不设为聚集索引  
ALTER TABLE BFQ_TEST_A ADD CONSTRAINT PK_BFQ_TEST_A PRIMARY KEY NONCLUSTERED  
(  
    [ID] ASC  
) ON [PRIMARY] 


--创建一个新的聚集索引,在该聚集索引中使用分区方案  
CREATE CLUSTERED INDEX CT_BFQ_TEST_A ON BFQ_TEST_A([Time])  
ON partschBFQ([Time])


--统计每个物理分区表中的记录数
select $PARTITION.partfunBfq(Time) as 分区编号, * from BFQ_TEST_A;


----------------------------------------将普通表转换成分区表END
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值