SQL Server2005 表分区(第一章)

第一章

1、什么是分区

2、为什么要把表进行分区

3、怎么把表进行分区

----------------------------------------华丽的分割线-----------------------------------------

1、什么是分区

简单的理解就是把一个数据库表分成若干个小的数据库表。

举个例子:一个进货表中有10条数据(主键ID自增长),我们可以按照个数进行分区,把ID 1-3的放一个表中,4-6的放一个表中,7-10的放一个表中;这样,我们就相当于把这个进货表分成了3个小表(即3个区)。当我们在通过ID进行查询的时候,如查询ID=5,这样就会只查询ID为4-6所在的表,表中的数据量由原来的10个变成了现在的3个,数据量小了,查询速度自然也就快了。

有人会说,我可以直接建立3张表(即进货表a、进货表b、进货表c),也能达到上面的效果。

这就是我要说的把表进行分区和建立真实表的区别,如果按照上面所说,建立了3张进货表,当我们在使用和查询的时候就需要操作三张表,对于程序员来说是件很麻烦的事儿,而且极易出现错误。

用分区就完全解决了上面的问题,表面上我们把进货表分成了3部分,但从逻辑上看他依然是一张表,对于程序员使用上来说就是一张表。

----------------------------------------华丽的分割线-----------------------------------------

2、为什么要把表进行分区


当数据量超大、且查询起来很慢的时候,我们就要考虑优化了;把表进行分区就是优化的一种。通过对表进行分区,可以大大的节省时间,当然也并不是所有的表进行分区之后都能达到优化的作用,反之还会使速度变慢,开销变大。下面会举例说明。

那么,什么样的表适合分区呢?

1、数据量超级大,大到个人感觉查询起来较慢的数据量。(没有具体数字,个人感觉百万级数据的表算是大的了)

2、一部分数据不经常使用,例如几十年的历史数据,在查询的时候只需要查询进一两年的数据;即数据库表中有经常不用的数据。(要是一直不用,建议对数据进行封存),要是这个表中的数据经常使用,即使有千万或是过亿的数据,也不要进行表分区,不然会更慢的。

3、表分区和一些索引是有冲突的,对于表来说,分区要是优于索引的话,可以进行分区。(下面会有具体例子证明)

----------------------------------------华丽的分割线-----------------------------------------

3、怎么把表进行分区

①、创建分区函数

②、创建分区方案

③、创建数据库表使用分区方案


①、创建分区函数

创建分区函数,是为了告诉SQL Server我们以什么样的条件对表进行分区的。

还是以上面进货表(a表)为例,把ID 1-3的放一个表中,4-6的放一个表中,7-10的放一个表中。代码如下:

--创建分区函数(分成三个区,1区小于等于3的、2区大于3小于等于6的、3区大于6的)
CREATE PARTITION FUNCTION partfunA (int)  
AS RANGE LEFT FOR VALUES (3,6) 

注释:

1、CREATE PARTITION FUNCTION partfunA(int) 是创建分区函数名为partfunA的分区函数,分区的条件为(int)型

2、AS RANGE LEFT FOR VALUES(3,6)是将表按照条件(1区小于等于3的、2区大于3小于等于6的、3区大于6的)分成3个区;LEFT或RIGHT是条件(即3和6),放在左/右边的分区(这里用LEFT,id为3的数据就放在第一分区里,id为6的数据放在第二分区里)

图1

如图1所示,创建后会在数据库存储下分区函数下出现 partfunA 分区函数


②、创建分区方案

创建分区方案,是将分区函数生成的分区映射到文件组中去。分区方案是为了告诉SQL Server将已分区的数据放在哪个文件组中。代码如下:

--创建分区方案(将已分区的数据放在主文件里,三个区都放在主文件里)
CREATE PARTITION SCHEME partschA 
AS PARTITION partfunA  
TO ([Primary],[Primary],[Primary])

注释:

1、CREATE PARTITION SCHEME partschA是创建一个名为partschA的分区方案。

2、AS PARTITION partfunA是使用partfunA分区函数。

3、TO ([Primary],[Primary],[Primary])把partfunA分区函数划分出来的数据存放在文件组中(这里都存放在主数据文件中)

图2


如图2所示,创建后会在数据库存储下分区方案下出现 partschA 分区方案


③、创建数据库表使用分区方案

创建数据库表,并且使用分区方案。代码如下:

--创建数据库表a,并使用分区方案partschA
if object_id(‘[a]‘) is not null drop table [a]
go 
create table [a]
(
[ID] int,
[品名] varchar(6),
[入库数量] int,
[入库时间] datetime
) on partschA(ID)

注释:

1、on partschA(ID)对a表使用partschA分区方案

右键点击表a属性-常规,如下图:


图3

如图3所示,创建的表a已经进行了分区。













郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。