前言
SQL Server 2005开始支持表分区,这种技术允许所有的表分区都保存在同一台服务器上。每一个表分区都和在某个文件 组(filegroup)中的单个文件关联。同样的一个文件/文件组可以容纳多个分区表。 在这种设计架构下,数据库引擎能够判定查询过程中应该访问哪个分区,而不用扫描整个表。如果查询需要的数据行分散在多个分区中,SQL Server使用多个处理器对多个分区进 行并行查询。你可以为在创建表的时候就定义分区的索引。 对小索引的搜索或者扫描要比扫描整个表或者一张大表上的索引要快很多。因此,当对大表进行查询,表 分区可以产生相当大的性能提升
通过分别检 查同一条返回所有行的、简单SELECT语句在分区表和非分区表上的执行计划,返回的数据范围通过WHERE语句来指定。同一条语句在这 两个不同的表上有不同的执行计划。对于分区表的查询显示出一个嵌套的循环和索引的扫描。从本质上来说,SQL Server将两个分区视为独立的表,因 此使用一个嵌套循环将它们连接起来。对非分区的表的同一个查询则使用索引扫描来返回同样的列。当你使用同样的分区策略创建多个表,同时在查询中连接这些 表,那么性能上的提升会更加明显
分区請三思
1.虽然分区可以带来众多的好 处,但是同进也增加了实现对象的管理费用和复杂性。因此在进行分区之前要首先仔细的考虑以确定是否应为对象进行分区。
2.在确定了为对象进行分区后, 下一步就要确定分区键和分区数。要确定分区数据,应先评估您的数据中是否存在逻辑分组和模式。
3.确定是否应使用多个文件分 组。为了有助于优化性能和维护,应使用文件组分离数据。文件组是数据库数据文件的逻辑组合,它可以对数据文件进行管理和分配,以便提高数据库文件的并发访 问效率。
分区三步曲
SQL Server数据库表分区操作过程由三个步骤组成:
1. 创建分区函数
2. 创建分区架构
3. 对表进行分区
(一):创建一个分区函数(逻辑结构)
此分区函数用于定义你希望SQL Server如何对数据进行分区的参数值(how)。这个操作并不涉及任何表格, 只是单纯的定义了一项技术来分割数据。
--刪除表
if object_id('tb_partition1')is not null drop table tb_partition1
go
if object_id('tb_partition2')is not null drop table tb_partition2
go
--刪除架構
If exists(Select 1 from sys.partition_schemes where name='my_psch')
drop partition scheme my_psch
go
--刪除分區函數
if exists(select 1 from sys.partition_functions where name='my_pfun')
drop partition function my_pfun
--建立分區函數
create partition function my_Pfun(datetime)
as range left
for values('2007-12-31')
注意:这 里调用的"RANGE RIGHT"语句表明每个分区边界值是右 界。类似的,如果使用"RANGE LEFT"语句,则上述第一个分区应该包括所有值小于或等于'2004-01-01'数据,以此类推.
(二):创建一个分区架构(物理结构)
一旦给出描述如何分割数据的 分区函数,接着就要创建一个分区架构,用来定义分区位置(where)。创建过程非常直截了当,只要将分区连接到指定的文件组就行了。
--建立分區架構
go
create partition scheme my_psch
as partition my_pfun
to([Primary],[Primary])
, 分区函数提供的值的数目n,不能超过 999。所创建的分区数等于 n + 1 */
注意:这 里将一个分区函数连接到了该分区架构,但并没有将分区架构连接到任何数据表。这就是可复用性起作用的地方了。无论有多少数据库表,我们都可以使用该分区架构(或仅仅是分区函数)。
(三):对一个表进行分区
定义好一个分区架构后,就可 以着手创建一个分区表了。只需要在表创建指令中添加一个"ON"语句,用来指定分区架构以及应 用该架构的表列。因为分区架构已经识别了分区函数,所以不需要再指定分区函数了。
create table tb_partition1
(id int identity,
dt datetime,
[name]as 'Name'+ltrim(ID),
constraint pk_tbpartition1 primary key clustered(ID,dt)on my_psch(dt)
)on my_psch(dt)
go
create table tb_partition2
(id int identity,
dt datetime,
[name]as 'Name'+ltrim(ID),
constraint pk_tbpartition2 primary key clustered(ID,dt)on my_psch(dt)
)on my_psch(dt)--为此表填充数
declare @dt datetime
set @dt='2007-01-01'
while @dt<='2009-10-01'
begin
insert tb_partition1 select @dt
set @dt=dateadd(dd,1,@dt)
end
--查询表的分区狀况 Select * from sys.partitions
Where object_id In
(Select object_id From sys.tables Where name In('tb_partition1','tb_partition2'))
---- 现在我们可以看一下我们刚才插入的行都分布在哪个Partition select *,$partition.my_pfun(dt) from tb_partition1
--切換分區
--切換前
select * from tb_partition1
select * from tb_partition2
----切換分區tb_partition1-->tb_partition2
Alter Table tb_partition1
Switch Partition 2 To tb_partition2 Partition 2
go
select * from tb_partition1
select * from tb_partition2
修改三步曲 1 添加一个文件组到数据库(可選) 2 修改分区Scheme 3 修 改分区函数
个分区 --3 修改分 区函数Alter Partition Function My_pfun()
Alter Partition Scheme my_psch
Next Used [Primary]
go
Split Range('2008/12/31')
Go
--把小于2008/12/31的两分区合并
Alter Partition Function My_PFun()
Merge Range('2007/12/31')
SQL Server2005 表分区三步曲(zz)的更多相关文章
-
Membership三步曲之进阶篇 - 深入剖析Provider Model
Membership 三步曲之进阶篇 - 深入剖析Provider Model 本文的目标是让每一个人都知道Provider Model 是什么,并且能灵活的在自己的项目中使用它. Membershi ...
-
SQL Server 表分区备忘
1.创建的代码如下: )) AS RANGE LEFT FOR VALUES ( N', N', N',... ) CREATE PARTITION SCHEME [01_SubjectiveScor ...
-
Membership三步曲之入门篇 - Membership基础示例
Membership 三步曲之入门篇 - Membership基础示例 Membership三步曲之入门篇 - Membership基础示例 Membership三步曲之进阶篇 - 深入剖析Pro ...
-
[转]Membership三步曲之入门篇 - Membership基础示例
本文转自:http://www.cnblogs.com/jesse2013/p/membership.html Membership三步曲之入门篇 - Membership基础示例 Members ...
-
SQL Server表分区【转】
转自:http://www.cnblogs.com/knowledgesea/p/3696912.html SQL Server表分区 什么是表分区 一般情况下,我们建立数据库表时,表数据都存放在 ...
-
SQL Server表分区详解
原文:SQL Server表分区详解 什么是表分区 一般情况下,我们建立数据库表时,表数据都存放在一个文件里. 但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆 ...
-
SQL Server表分区-水平分区
SQL Server表分区,sql server水平分区 转自:http://www.cnblogs.com/knowledgesea/p/3696912.html 根据时间的,直接上T-SQL代码 ...
-
ASP.NET 安全系列 Membership三步曲之入门篇 - Jesse Liu
Membership 三步曲 ASP.NET 安全系列 Membership三步曲之入门篇 ASP.NET 安全系列 Membership三步曲之进阶篇 ASP.NET 安全系列 Membership ...
-
VC控件自绘制三步曲
http://blog.csdn.net/lijie45655/article/details/6362441 实现自定义绘制的三步曲 既然您已经了解了绘制控件可用的各种选项(包括使用自定义绘制的好处 ...
随机推荐
-
get传中文参数乱码解决方法
通常我们前端不同页面之间传参数用得最多的方法就是get方法:在url后面加上参数.例如:www.test.com?id=1&name=hello. 英文和字母很好处理,但是如果有的参数值为中文 ...
-
LaTex表格内单元格内容强制换行
/newcommand{/tabincell}[2]{/begin{tabular}{@{}#1@{}}#2/end{tabular}}%放在导言区 %然后使用&/tabincell{c}{} ...
-
matlab 画锥体
>> plot3(x,y,z); >> [x,y,z]=cylinder([ ],)
-
Sort List leetcode
这个题一开始本想用快速排序的,但是想了20分钟都没有头绪,难点在于快速排序的随机访问无法用链表实现,不过如果可以实现快速排序partition函数就可以了,但是这可能比较复杂,于是改用其他排序方法,上 ...
-
关于Java里面File类创建txt文件重复???
private JButton getOpenButton() { if (openButton == null) { openButton = new JButton(); openButton.s ...
-
(译)openURL 在 iOS10中已弃用
翻译自:openURL Deprecated in iOS10 译者:Haley_Wong 苹果在iOS 2 推出了 openURL:方法 作为一种打开外部链接的方式.而与之相关的方法 canOpen ...
-
c++字节对齐编译器指令#pragma
第一种 #pragma pack(push, 1) // 先把当前对齐设置压栈,再设置为1字节对齐 struct S { char a; ]; }; #pragma pack(pop) // 恢复先前 ...
-
Linux下不同文件不同颜色的意义
通常,我们使用ls查看文件时,会出现不同颜色的文件,今天我就大概写一下不同颜色的代表意义: 蓝色————目录: 绿色————可执行文件: 红色————压缩文件: 浅蓝色————链接文件: 紫红色——— ...
-
Fabric架构:抽象的逻辑架构与实际的运行时架构
Fabric从1.X开始,在扩展性及安全性上面有了大大的提升,且新增了诸多的新特性: 多通道:支持多通道,提高隔离安全性. 可拔插的组件:支持共识组件.权限管理组件等可拔插功能. 账本数据可被存储为多 ...
-
Delphi实例之一个简易的浏览器的实现
Delphi实例之一个简易的浏览器的实现 Delphi7的WebBrowser组件提供了很多不错的网页设计的功能,下面做一个简单的浏览器.组件很简单按照下面摆放就行了. 这是运行后的效果 源代码 主页 ...