(转)SQLSERVER表分区的介绍(二)
分区函数和分区方案的创建和使用方法
具体设计过程如下:
(1)首先创建一个名为partionTest的数据库。然后分别为数据库partionTest添加四个文件组,文件组名依次为FileGroup001~FileGroup004,
然后为该数据库添加四个数据文件,分别命名为File001~File004,并将它们依次保存到文件组FileGroup001~FileGroup004中。
(2)以数据库partionTest为例,右击数据库partionTest,从其快捷菜单中选择【属性】命令,打开【数据库属性】对话框。选择该对话框中的
【选择页】列表中的【文件】选项,然后单击选项页的【添加】按钮,为该数据库添加一个文件,将文件的逻辑名命名为File001,然后单击【文件组】
列中的下拉列表,打卡【partionTest的新建文件组】对话框,在【名称】文本框中输入需要命名的文件组名称,本示例使用FileGroup001,
如下图所示:
(3)按照上面介绍的方法创建剩余的3个文件及文件组,最终效果如下图所示:
注意:默认情况下SQLSERVER2005将使用于逻辑名称相同的名称作为数据库的物理主文件名。因此,如果使用一个统一的文件夹来保存数据库文件,
就需要注意为不同数据库的数据文件设定不同的逻辑名称。
(4)做好上述准备工作后,接下来就可以开始创建分区方案和分区函数了。首先创建一个分区函数,所谓分区函数,就是一种用于规定如何将数据划分到不同分区的
规则函数。在【查询编辑器】窗口中输入下面T-SQL脚本:
USE partionTest
GO
CREATE PARTITION FUNCTION PartionByInt(int)
AS RANGE LEFT FOR VALUES(100,200,300)
GO
上述T-SQL脚本设置相应的分区划分规则,其中设置了3个数值类型的分区点,分别为100、200、300,并通过关键词LEFT指明了由3个分区点划分的4段分区,
即(-∞,100)、[101,200]、[201,300]和[301,∞],如果使用关键词RIGHT,分区将变化为[100,199]、[200,299]、[300,399]和[400,499]。单击【执行】
按钮,创建名为PartionByInt的分区函数。
(5)切换到【对象资源管理器】中,展开数据库partionTest\【存储】\【分区函数】节点,可以看到刚刚创建的分区函数PartionByInt,如下图所示:
(6)继续在【查询编辑器】窗口中输入下面的T-SQL脚本:
USE partionTest GO CREATE PARTITION SCHEME PartionByIntScheme AS PARTITION PartionByInt TO(FileGroup001,FileGroup002,FileGroup003,FileGroup004);
上述T-SQL脚本将创建一个名为PartionByIntScheme的分区方案。创建该方案时,通过AS PARTITION指定了用于创建分区方案的分区函数(即前面创建的分区函数PartionByInt)。
同时,通过关键词TO将创建的分区与文件组FileGroup001~FileGroup004相绑定。单击【执行】按钮,创建该分区方案。
(7)切换到【对象资源管理器】下,展开数据库partionTest\【存储】\【分区方案】节点,可以看到刚刚创建的分区方案PartionByIntScheme,如下图所示:
(8)接下来为了演示分区方案的使用方法,在此需要首先创建一个数据表,本示例创建一个名为testPartionTable的数据表。在【查询编辑器】窗口中输入下面的
T-SQL脚本:
USE partionTest
GO
CREATE TABLE testPartionTable
(ID INT NOT NULL,
ItemNo CHAR(20),
ItemName CHAR(40)
)ON PartionByIntScheme(ID);
(9)单击【执行】按钮,创建名为testPartionTable的数据表。需要注意的是,在这里创建数据表时,使用了关键词ON来指定需要使用的分区方案,并将字段ID指定为
分区的依据字段,即根据ID值将数据分别保存于不同的文件(即分区)中。下面使用上面创建的分区方案,向数据表testPartionTable插入数据。在【查询编辑器】
窗口中输入下面的T-SQL脚本:
USE partionTest
GO declare @count int
set @count=-25
while @count<=100
begin
insert into testPartionTable select
@count,'ITEM'+convert(varchar(6),@count),'>0 and <100'
set @count=@count+1
end set @count=101
while @count<=200
begin
insert into testPartionTable select
@count,'ITEM'+convert(varchar(6),@count),'>100 and <200'
set @count=@count+1
end set @count=201
while @count<=300
begin
insert into testPartionTable select
@count,'ITEM'+convert(varchar(6),@count),'>200 and <300'
set @count=@count+1
end set @count=301
while @count<=400
begin
insert into testPartionTable select
@count,'ITEM'+convert(varchar(6),@count),'>300 and <400'
set @count=@count+1
end
set @count=401
while @count<=500
begin
insert into testPartionTable select
@count,'ITEM'+convert(varchar(6),@count),'>400 and <500'
set @count=@count+1
end select * from testPartionTable
GO
(10)上述T-SQL脚本用于向数据表testPartionTable中输入5组数据,这些数据将被自动地插入到4个不同的文件(即4个不同的分区)File001~File004中。单击【执行】按钮,
运行上述T-SQL脚本,结果如下图:
(11)如果想要查询指定分区中包含的数据(例如查看第3分区中所包含的记录),可以使用如下T-SQL脚本:
USE partionTest
GO select * from testPartionTable
where $PARTITION.PartionByInt(ID)=3
GO
(12)其中系统函数$PARTITION,用于为指定的分区函数返回分区号,例如$PARTITION.PartionByInt(ID)用于返回给ID所处的分区号。单击【执行】按钮
所得查询结果如下图所示:
(转)SQLSERVER表分区的介绍(二)的更多相关文章
- (转)SQLSERVER表分区的介绍(一)
下面进入正题吧,很多时候当单张数据表的数据量比较大的时候比如千万级别条记录.上亿级别记录,如果不做优化,那么查询的效率大家清楚. 有经验的人会通过各种手段做优化,其中表分区就是其中一种手段. 个人对表 ...
- sqlserver表分区
参考:http://www.cnblogs.com/knowledgesea/p/3696912.html 及百度搜索sqlserver表分区 create partition function sg ...
- sqlserver表分区与调优与行列转换
转自: http://www.cnblogs.com/knowledgesea/p/3696912.html http://www.open-open.com/lib/view/open1418462 ...
- MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习
MySQL之多表查询 阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建 ...
- sqlserver表分区小结
为什么要表分区? 当一个表的数据量太大的时候,我们最想做的一件事是什么?将这个表一分为二或者更多分,但是表还是这个表,只是将其内容存储分开,这样读取就快了N倍了 原理:表数据是无法放在文件中的,但是 ...
- 优化SQLServer——表和分区索引(二)
简介 之前一篇简单的介绍了语法和一些基本的概念,隔了一段时间,觉得有必要细致的通过实例来总结一下这部分内容.如之前所说,分区就是讲大型的对象(表)分成更小的块来管理,基本单位是行.这也就产生了 ...
- mysql分区表之二:MySQL的表的四种分区类型介绍
一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了.如:某用户表的记录超过了600万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区 ...
- 优化SQLServer——表和分区索引
概念: 简单地说,分区是将大型的对象(如表)分成更小的且易于管理的小块.分区的基本单位是行,需要注意的是与分区视图不同的地方时,分区必须位于同一个数据库内. 分区的原因: 对于非 ...
- SQL表分区之二
前面说的给表做表分区,现在有个问题,比如上面我们说的是按照20w为一个分割线,那些现在我们想把这个调整下怎么办?难道要把之前的分区函数和分区方案删了,重新新建分区函数和分区方案嘛? 当然,此方式肯定是 ...
随机推荐
- C语言用static限制函数以及全局变量的作用域
今天才发现这个东西! C语言中没有public private之类的东西. 如果一个函数或者一个全局变量只想在一个.c文件中使用,可以在前面加上static! 以前我还傻傻的每个.c文件中的函数都加一 ...
- BZOJ 1005: [HNOI2008]明明的烦恼 Purfer序列 大数
1005: [HNOI2008]明明的烦恼 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...
- C# 使用微软的Visual Studio International Pack 类库提取汉字拼音首字母
首先下载Visual Studio International Pack 1.0,官方下载地址:http://www.microsoft.com/downloads/zh-cn/details.asp ...
- c#加密 可逆与不可逆MD5 加密
1.方法一 (不可逆加密) srxljl public string EncryptPassword(string PasswordString,string PasswordFormat ) ...
- 关于android 将对象写入文件以及从文件读取对象
由于项目需求,需要保存用户登录过的一些配置,当下次登录的时候读取登录过的配置,所以简单的SharePreferences没有办法满足,于是找到了Java中ObjectInputStream 与 Obj ...
- MemCached Cache Java Client封装优化历程
1.什么是memcached?(从官网翻译翻译) 免费和开源.高性能.分布式内存对象缓存系统,通用在自然界,但用于加速动态web应用程序,减轻数据库负载. Memcached是一个内存中的键值存储为小 ...
- [AngularJS] Build Your Own ng-controller Directive
/** * Created by Answer1215 on 12/21/2014. */ angular.module('app', []) .controller('FirstCtrl' , fu ...
- XtraBackup原理4
MySQL · 答疑解惑 · 物理备份死锁分析 背景 本文对 5.6 主备场景下,在备库做物理备份遇到死锁的case进行分析,希望对大家有所帮助. 这里用的的物理备份工具是 Percona-XtraB ...
- 机器学习经典算法详解及Python实现--基于SMO的SVM分类器
原文:http://blog.csdn.net/suipingsp/article/details/41645779 支持向量机基本上是最好的有监督学习算法,因其英文名为support vector ...
- 如何用eclispe远程调试tomcat--转载
原文地址:http://jingyan.baidu.com/article/0320e2c1f4ef6b1b87507b06.html tomcat是一种非常常见的java web应用服务器,有时候服 ...