设为首页 收藏本站
查看: 1566|回复: 0

[经验分享] [sql server] SQL Server 2005中的分区表

[复制链接]

尚未签到

发表于 2016-10-30 04:44:12 | 显示全部楼层 |阅读模式
  
  SQL Server 2005中的分区表(一):什么是分区表?为什么要用分区表?如何创建分区表?
  
  SQL Server 2005中的分区表(二):如何添加、查询、修改分区表中的数据
  
  SQL Server 2005中的分区表(三):将普通表转换成分区表
  
  SQL Server 2005中的分区表(四):删除(合并)一个分区
  
  SQL Server 2005中的分区表(五):添加一个分区
  
  SQL Server 2005中的分区表(六):将已分区表转换成普通表
  
  
  IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Sale]') AND type in (N'U'))
DROP TABLE [dbo].[Sale]
go
  IF EXISTS (SELECT * FROM sys.partition_schemes WHERE name = N'partschSale')
DROP PARTITION SCHEME [partschSale]
go
  IF EXISTS (SELECT * FROM sys.partition_functions WHERE name = N'partfunSale')
DROP PARTITION FUNCTION [partfunSale]
go
  --创建分区函数
CREATE PARTITION FUNCTION partfunSale (datetime)
AS RANGE RIGHT FOR VALUES ('20100101','20110101','20120101','20130101')
go
  --创建分区方案
CREATE PARTITION SCHEME partschSale
AS PARTITION partfunSale
ALL TO ([PRIMARY] )
go
  --创建分区表
CREATE TABLE Sale(
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](16) NOT NULL,
[SaleTime][datetime] NOT NULL
) ON partschSale([SaleTime])
go
  insert Sale ([Name],[SaleTime]) values ('张三','2009-1-1')
insert Sale ([Name],[SaleTime]) values ('李四','2009-2-1')
insert Sale ([Name],[SaleTime]) values ('王五','2009-3-1')
insert Sale ([Name],[SaleTime]) values ('钱六','2010-4-1')
insert Sale ([Name],[SaleTime]) values ('赵七','2010-5-1')
insert Sale ([Name],[SaleTime]) values ('张三','2011-6-1')
insert Sale ([Name],[SaleTime]) values ('李四','2011-7-1')
insert Sale ([Name],[SaleTime]) values ('王五','2011-8-1')
insert Sale ([Name],[SaleTime]) values ('钱六','2012-9-1')
insert Sale ([Name],[SaleTime]) values ('赵七','2012-10-1')
insert Sale ([Name],[SaleTime]) values ('张三','2012-11-1')
insert Sale ([Name],[SaleTime]) values ('李四','2013-12-1')
insert Sale ([Name],[SaleTime]) values ('王五','2014-12-1')
go
  select * from Sale
--
select $PARTITION.partfunSale ('2010-10-1')
/*
-----------
2
*/
  select * from Sale where $PARTITION.partfunSale(SaleTime)=1
select * from Sale where $PARTITION.partfunSale(SaleTime)=2
select * from Sale where $PARTITION.partfunSale(SaleTime)=3
select * from Sale where $PARTITION.partfunSale(SaleTime)=4
select * from Sale where $PARTITION.partfunSale(SaleTime)=5
  /*
Id Name SaleTime
----------- ---------------- -----------------------
1 张三 2009-01-01 00:00:00.000
2 李四 2009-02-01 00:00:00.000
3 王五 2009-03-01 00:00:00.000
  (3 行受影响)
  Id Name SaleTime
----------- ---------------- -----------------------
4 钱六 2010-04-01 00:00:00.000
5 赵七 2010-05-01 00:00:00.000
  (2 行受影响)
  Id Name SaleTime
----------- ---------------- -----------------------
6 张三 2011-06-01 00:00:00.000
7 李四 2011-07-01 00:00:00.000
8 王五 2011-08-01 00:00:00.000
  (3 行受影响)
  Id Name SaleTime
----------- ---------------- -----------------------
9 钱六 2012-09-01 00:00:00.000
10 赵七 2012-10-01 00:00:00.000
11 张三 2012-11-01 00:00:00.000
  (3 行受影响)
  Id Name SaleTime
----------- ---------------- -----------------------
12 李四 2013-12-01 00:00:00.000
13 王五 2014-12-01 00:00:00.000
  (2 行受影响)
  */
  select $PARTITION.partfunSale(SaleTime) as 分区编号,count(id) as 记录数
from Sale group by $PARTITION.partfunSale(SaleTime)
  /*
分区编号 记录数
----------- -----------
1 3
2 2
3 3
4 3
5 2
  (5 行受影响)
  */
  --统计所有分区表中的记录总数
select $PARTITION.partfunSale(SaleTime) as 分区编号,count(id) as 记录数 from Sale group by $PARTITION.partfunSale(SaleTime)
--修改编号为1的记录,将时间改为2019年1月1日
update Sale set SaleTime='2019-1-1' where id=1
--重新统计所有分区表中的记录总数
select $PARTITION.partfunSale(SaleTime) as 分区编号,count(id) as 记录数 from Sale group by $PARTITION.partfunSale(SaleTime)
  /*
分区编号 记录数
----------- -----------
1 3
2 2
3 3
4 3
5 2
  (5 行受影响)
  (1 行受影响)
  分区编号 记录数
----------- -----------
1 2
2 2
3 3
4 3
5 3
  (5 行受影响)
  */
  
--统计所有分区表中的记录总数
select $PARTITION.partfunSale(SaleTime) as 分区编号,count(id) as 记录数 from Sale group by $PARTITION.partfunSale(SaleTime)
--原来的分区函数是将2010-1-1之前的数据放在第1个分区表中,将2010-1-1至2011-1-1之间的数据放在第2个分区表中
--现在需要将2011-1-1之前的数据都放在第1个分区表中,也就是将第1个分区表和第2个分区表中的数据合并
--修改分区函数
ALTER PARTITION FUNCTION partfunSale()
MERGE RANGE ('20100101')
--统计所有分区表中的记录总数
select $PARTITION.partfunSale(SaleTime) as 分区编号,count(id) as 记录数 from Sale group by $PARTITION.partfunSale(SaleTime)
  /*
分区编号 记录数
----------- -----------
1 2
2 2
3 3
4 3
5 3
  (5 行受影响)
  分区编号 记录数
----------- -----------
1 4
2 3
3 3
4 3
  (4 行受影响)
*/

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-293013-1-1.html 上篇帖子: sql server 面试--转 下篇帖子: SQL SERVER CONVERT FUNCTION
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表