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