SQL Server基础SQL脚本之分区表、分区方案

代码120行左右 本系列,几乎都是代码,记得当时写的时候用的是微软的官方实例数据库AdventureWorks_Data.mdf、AdventureWorks_Log.ldf来运行的。 下载链接:链接: https://pan.baidu.com/s/1pMdLz6N 密码: xvhu 或者回复“AdventureWorks”来获取链接。


--创建文件组
create database alex2
on primary
(name='alex',filename='c:\Data\alex.mdf',size=3mb,maxsize=10mb,filegrowth=1mb),
Filegroup old
(name='olddb',filename='c:\Data\olddb.ndf',size=1mb,maxsize=10mb,filegrowth=1mb),
Filegroup first
(name='firstdb',filename='c:\Data\firstdb.ndf',size=1mb,maxsize=10mb,filegrowth=1mb),
Filegroup second
(name='seconddb',filename='c:\Data\seconddb.ndf',size=1mb,maxsize=10mb,filegrowth=1mb),
Filegroup third
(name='thirddb',filename='c:\Data\thirddb.ndf',size=1mb,maxsize=10mb,filegrowth=10%),
Filegroup fourth
(name='fourthdb',filename='c:\Data\fourthdb.ndf',size=1mb,maxsize=10mb,filegrowth=10%)
log on
(name='alex_log',filename='c:\Data\alex_log.ldf',size=1mb,maxsize=10mb,filegrowth=1mb)
go

--使用数据库
use alex2
go

--创建分区函数
--按照一定的条件划分数据
--range left   (1900-01-01,1996-01-01] (1996-01-01,2000-01-01] 分界点的值归左边
--range right  (1900-01-01,1996-01-01) [1996-01-01,2000-01-01)    分界点的值归右边
create partition function RateChngDate(datetime)
as range right for values('1996-01-01','2000-01-01','2004-01-01','2008-01-01')


    --创建分区方案
--将分区函数区分的范围和文件组对应起来
create partition scheme RateChngDate_Scheme
as partition RateChngDate to (Old,First,Second,Third,Fourth)

--创建分区表
create table EmpPayHistPart
(
    EmployeeID int,
    RateChangeDate datetime,
    Rate money,
    PayFrequency tinyint,
    ModifiedDate datetime
)on RateChngDate_Scheme(RateChangeDate)


--添加数据
insert into EmpPayHistPart values(1,'1992-01-01',1200,2,'2005-01-01')
insert into EmpPayHistPart values(1,'2001-01-01',1200,2,'2005-01-01')
insert into EmpPayHistPart values(1,'2003-01-01',1200,2,'2005-01-01')
insert into EmpPayHistPart values(1,'2005-01-01',1200,2,'2005-01-01')
insert into EmpPayHistPart values(1,'2023-01-01',1200,2,'2005-01-01')
--检索分区
select * from EmpPayHistPart where $partition.RateChngDate(RateChangeDate)=0
select * from EmpPayHistPart where $partition.RateChngDate(RateChangeDate)=1
select * from EmpPayHistPart where $partition.RateChngDate(RateChangeDate)=2
select * from EmpPayHistPart where $partition.RateChngDate(RateChangeDate)=3
select * from EmpPayHistPart where $partition.RateChngDate(RateChangeDate)=4
select * from EmpPayHistPart where $partition.RateChngDate(RateChangeDate)=5
select * from EmpPayHistPart where $partition.RateChngDate(RateChangeDate)=6

select * from EmpPayHistPart


---------------分隔分区
--修改数据库添加文件组
alter database alex2
add    filegroup Fifth
--修改数据库向文件组中添加文件
alter database alex2
add file(name='Fifthdb',filename='c:\Data\Fifthdb.ndf',size=1mb,maxsize=10mb,filegrowth=1mb)
to filegroup Fifth
go
--修改分区方案 让下一个分区使用Fifth文件组
alter partition scheme RateChngDate_Scheme
next used Fifth
--修改分区函数 加入一个临界点2002-01-01
alter partition function RateChngDate()
split range ('2002-01-01')
go

---------------------合并分区
--将2008-01-01之后的数据和前一个分区数据合并
--原来是2004-01-01到2008-01-01,2008-01-01到以后
--现在是2004-01-01到以后
alter partition function RateChngDate()
merge range('2008-01-01')

-------------------创建表保存分区
--修改数据库添加文件组Sixth
alter database alex2
add    filegroup Sixth
--修改数据库添加文件到文件组Sixth
alter database alex2
add file(name='Sixthdb',filename='c:\Data\Sixthdb.ndf',size=1mb,maxsize=10mb,filegrowth=1mb)
to filegroup Sixth
go
--修改分区方案让下一个分区对应文件组Sixth
alter partition scheme RateChngDate_Scheme
next used Sixth
--分隔数据分区
alter partition function RateChngDate()
split range ('2012-01-01')
go
--创建表来保存分区数据
create table New_EmpPayHistPart
(
    EmployeeID int,
    RateChangeDate datetime,
    Rate money,
    PayFrequency tinyint,
    ModifiedDate datetime
)on Sixth
--将分区6中的数据移动到新表中
alter table EmpPayHistPart
switch partition 6 to New_EmpPayHistPart

原文发布于微信公众号 - 数据库SQL(SQLdba)

原文发表时间:2018-02-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏散尽浮华

ELK实时日志分析平台环境部署--完整记录

在日常运维工作中,对于系统和业务日志的处理尤为重要。今天,在这里分享一下自己部署的ELK(+Redis)-开源实时日志分析平台的记录过程(仅依据本人的实际操作为...

2987
来自专栏逸鹏说道

在 EF 5 中跟踪SQL和缓存数据

在EF4和EF5中需要跟踪执行SQL和缓存数据,微软官方有一个名为EFProviderWrappers的扩展示例非常值得学习,EFProviderWrapper...

2728
来自专栏xiaoheike

storm集群部署

机子配置信息 操作系统:CentOS release 6.5 (Final) cpu:Intel(R) Xeon(R) CPU E5-2630 v2 @ 2...

952
来自专栏北京马哥教育

MySQL Master High Available 理论篇(二)

六、核心参数详解 6.1 参数矩阵图 ? ? Local Scope 每个server域的参数 在application 配置文件(app.cnf)中:[ser...

2687
来自专栏一个会写诗的程序员的博客

Failure [INSTALL_FAILED_NO_MATCHING_ABIS]

这个问题出现在模拟器上的概率更大些,原因是某些应用使用了原生库(NDK,Native Lib),这些库的编译目标通常是arm架构的cpu,在x86上运行就会报这...

582
来自专栏沈唁志

在Windows10安装Docker遇到问题的解决方法

在 Windows 上安装Docker是一个相当简单和直接的过程,之前接触Docker是在 Centos 系统下,在 Windows 下并没有尝试过

2903
来自专栏龙首琴剑庐

原 微服务Spring Cloud Eur

1294
来自专栏圣杰的专栏

.NET Core+MySql+Nginx 容器化部署

1. 引言 上两节我们通过简单的demo学习了docker的基本操作。这一节我们来一个进阶学习,完成ASP.NET Core + MySql + Nginx的容...

3808
来自专栏finleyMa

使用pm2方便开启node集群模式

这篇文章 写的不错,通过这篇文章你可以了解node集群的原理及如果使用pm2快速方便的开启集群模式。

761
来自专栏bboysoul

使用本地的docker客户端连接远程docker的守护进程

在这之前我们要知道docker是一个c/s架构的程序,也就是说我们输入的docker命令实际上是客户端用来发送指令给docker的守护进程的,所有的操作都是do...

602

扫码关注云+社区