MsSQL   发布时间:2022-05-16  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Ms sqlserver2008 R2大数据表的分区实现大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_696_4@引自:http://blog.csdn.net/luoyanqing119/article/details/19239371

@H_696_4@
如果你的数据库中某一个表中的数据满足以下几个条件,那么你就要虑创建分区表了。

 @H_262_12@ @H_262_12@  @H_262_12@1、数据库中某个表中的数据很多。很多是什么概念?一万条?两万条?还是十万条、一百万条?这个,我觉得是仁者见仁、智者见智的问题。当然数据表中的数据多到查询时明显感觉到数据很慢了,那么,你就可以虑使用分区表了。如果非要我说一个数值的话,我认为是100万条。

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@2、但是,数据多了并不是创建分区表的惟一条件,哪怕你有一千万条记录,但是这一千万条记录都是常用的记录,那么最好也不要使用分区表,说不定会得不偿失。只有你的数据是分段的数据,那么才要虑到是否需要使用分区表

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@3、什么叫数据是分段的?这个说法然很不专业,但很好理解。比如说,你的数据是以年为分隔的,对于今年的数据而言,你常进行的操作是添加、修改、删除和查询,而对于往年的数据而言,你几乎不需要操作,或者你的操作往往只限于查询,那么恭喜你,你可以使用分区表。换名话说,你对数据的操作往往只涉及到一部分数据而不是所有数据的话,那么你就可以虑什么分区表了。

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@那么,什么是分区表呢?

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@简单一点说,分区表就是将一个大表分成若干个小表。假设,你有一个销售记录表,记录着每个每个商场的销售情况,那么你就可以把这个销售记录表按时间分成几个小表,例如说5个小表吧。2009年以前的记录使用一个表,2010年的记录使用一个表,2011年的记录使用一个表,2012年的记录使用一个表,2012年以后的记录使用一个表。那么,你想查询哪个年份的记录,就可以去相对应的表里查询,由于每个表中的记录数少了,查询起来时间自然也会减少。

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@但将一个大表分成几个小表的处理方式,会给程序员增加编程上的难度。以添加记录为例,以上5个表是独立的5个表,在不同时间添加记录的时候,程序员要使用不同的sql语句,例如在2011年添加记录时,程序员要将记录添加到2011年那个表里;在2012年添加记录时,程序员要将记录添加到2012年的那个表里。这样,程序员的工作量会增加,出错的可能性也会增加。 @H_262_12@

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@使用分区表就可以很好的解决以上问题。分区表可以从物理上将一个大表分成几个小表,但是从逻辑上来看,还是一个大表。

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@接着上面的例子,分区表可以将一个销售记录表分成五个物理上的小表,但是对于程序员而言,他所面对的依然是一个大表,无论是2010年添加记录还是2012年添加记录,对于程序员而言是不需要虑的,他只要将记录插入到销售记录表——这个逻辑中的大表里就行了。sql Server会自动地将它放在它应该呆在的那个物理上的小表里。

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@同样,对于查询而言,程序员也只需要设置好查询条件,OK,sql Server会自动将去相应的表里查询,不用管太多事了。

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@这一切是不是很诱人?

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@的确,那么我们就可以开始动手创建分区表了。

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@第一、创建分区表的第一步,先创建数据库文件组,但这一步可以省略,因为你可以直接使用PRIMary文件。但我个人认为,为了方便管理,还是可以先创建几个文件组,这样可以将不同的小表放在不同的文件组里,既便于理解又可以提高运行速度。创建文件组的方法很简单,打开sql Server Management studio,找到分区表在数据库,右键单击,在弹出的菜单里选择“属性”。然后选择“文件组”选项,再单击下面的“添加”按钮,如下图所示:

 @H_262_12@

Ms sqlserver2008 R2大数据表的分区实现

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@第二,创建了文件组之后,还要再创建几个数据库文件。为什么要创建数据库文件,这很好理解,因为分区的小表必须要放在硬盘上,而放在硬盘上的什么地方呢?当然是文件里啦。再说了,文件组中没有文件,文件组还要来有啥用呢?还是在上图的那个界面,选择“文件”选项,然后添加几个文件。在添加文件的时候要注意以下几点:

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@1、不要忘记将不同的文件放在文件组中。当然一个文件组中也可以包含多个不同的文件。

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@2、如果可以的话,将不同的文件放在不同的硬盘分区里,最好是放在不同的独立硬盘里。要知道IQ的速度往往是影响sql Server运行速度的重要条件之一。将不同的文件放在不同的硬盘上,可以加快sql Server的运行速度。

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@在本例中,为了方便起见,将所有数据库文件都放在了同一个硬盘下,并且每个文件组中只有一个文件。如下图所示。

Ms sqlserver2008 R2大数据表的分区实现

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@第三、创建一个分区函数。这一步是必须的了,创建分区函数的目的是告诉sql Server以什么方式对分区表进行分区。这一步必须要什么sql脚本来完成。以上面的例子,我们要将销售表按时间分成5个小表。假设划分的时间为:

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@第1个小表:2010-1-1以前的数据(不包含2010-1-1)。

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@第2个小表:2010-1-1(包含2010-1-1)到2010-12-31之间的数据。

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@第3个小表:2011-1-1(包含2011-1-1)到2011-12-31之间的数据。

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@第4个小表:2012-1-1(包含2012-1-1)到2012-12-31之间的数据。

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@第5个小表:2013-1-1(包含2013-1-1)之后的数据。

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@那么分区函数的代码如下所示:

@H_674_16@  @H_262_12@

view plain copy to clipboard print ?
  1. CREATE @H_262_12@PARTITION @H_262_12@FUNCTION @H_262_12@partfunSALE @H_262_12@(datetiR_225_11845@E)  @H_262_12@ @H_262_12@
  2. AS @H_262_12@RANGE @H_262_12@RIGHT @H_262_12@FOR @H_262_12@VALUES @H_262_12@('20100101','20110101','20120101','20130101') @H_262_12@ @H_262_12@
  @H_674_16@  @H_262_12@

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@其中:

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@1、CREATE PARTITION FUNCTION意思是创建一个分区函数。

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@2、partfunSALE为分区函数名称。

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@3、AS RANGE RIGHT为设置分区范围的方式为Right,也就是右置方式。

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@4、FOR VALUES ('20100101','20110101','20120101','20130101')为按这几个值来分区。

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@这里需要说明的一下,在Values中,'20100101'、'20110101'、'20120101'、'20130101',这些都是分区的条件。“ @H_262_12@20100101”代表2010年1月1日,在小于这个值的记录,都会分成一个小表中,如表1;而小于或等于'20100101'并且小于'20110101'的值,会放在另一个表中,如表2。以此类推,到最后,所有大小或等于'20130101'的值会放在另一个表中,如表5。

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@也许有人会问,为什么值“ @H_262_12@20100101”会放在表2中,而不是表1中呢?这是由AS RANGE RIGHT中的RIGHT所决定的,RIGHT的意思是将等于这个值的数据放在右边的那个表里,也就是表2中。如果您的sql语句中使用的是Left而不是RIGHT,那么就会放在左边的表中,也就是表1中。

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@第四、创建一个分区方案。分区方案的作用是将分区函数生成的分区映射到文件组中去。分区函数的作用是告诉sql Server,如何将数据进行分区,而分区方案的作用则是告诉sql Server将已分区的数据放在哪个文件组中。分区方案的代码如下所示:

?

  1. CREATE @H_262_12@PARTITION @H_262_12@scheR_225_11845@E @H_262_12@partschSALE  @H_262_12@ @H_262_12@
  2. AS @H_262_12@PARTITION @H_262_12@partfunSALE  @H_262_12@ @H_262_12@
  3. TO @H_262_12@(  @H_262_12@ @H_262_12@
  4.  @H_262_12@ @H_262_12@ @H_262_12@ @H_262_12@SALE2009, @H_262_12@ @H_262_12@
  5.  @H_262_12@ @H_262_12@ @H_262_12@ @H_262_12@SALE2010, @H_262_12@ @H_262_12@
  6.  @H_262_12@ @H_262_12@ @H_262_12@ @H_262_12@SALE2011, @H_262_12@ @H_262_12@
  7.  @H_262_12@ @H_262_12@ @H_262_12@ @H_262_12@SALE2012, @H_262_12@ @H_262_12@
  8.  @H_262_12@ @H_262_12@ @H_262_12@ @H_262_12@SALE2013) @H_262_12@ @H_262_12@
 @H_262_12@ @H_262_12@  @H_262_12@1、CREATE PARTITION scheR_225_11845@E意思是创建一个分区方案。@H_696_4@ @H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@2、partschSALE为分区方案名称。

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@3、AS PARTITION partfunSALE说明该分区方案所使用的数据划分条件(也就是所使用的分区函数)为partfunSALE

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@4、TO后面的内容是指partfunSALE分区函数划分出来的数据对应存放的文件组。

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@到此为止,分区函数和分区方案就创建完毕了。创建后的分区函数和分区方案在数据库的“存储”中可以看到,如下图所示:

Ms sqlserver2008 R2大数据表的分区实现

@H_674_16@  @H_262_12@ @H_262_12@  @H_262_12@最后,创建分区表,创建方式和创建普遍表类似,如下所示:

?

大佬总结

以上是大佬教程为你收集整理的Ms sqlserver2008 R2大数据表的分区实现全部内容,希望文章能够帮你解决Ms sqlserver2008 R2大数据表的分区实现所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:你就那么