T-SQL查询进阶--理解SQL SERVER中的分区表

2022-08-18 00:00:00 函数 分区 分区表 分割 构架

简介


    分区表是在SQL SERVER2005之后的版本引入的特性。这个特性允许把逻辑上的一个表在物理上分为很多部分。而对于SQL SERVER2005之前版本,所谓的分区表仅仅是分布式视图,也就是多个表做union操作.

    分区表在逻辑上是一个表,而物理上是多个表.这意味着从用户的角度来看,分区表和普通表是一样的。这个概念可以简单如下图所示:

    


     而对于SQL SERVER2005之前的版本,是没有分区这个概念的,所谓的分区仅仅是分布式视图:

     


     本篇文章所讲述的分区表指的是SQL SERVER2005之后引入的分区表特性.

 

为什么要对表进行分区


     在回答标题的问题之前,需要说明的是,表分区这个特性只有在企业版或者开发版中才有,还有理解表分区的概念还需要理解SQL SERVER中文件和文件组的概念.

     对表进行分区在多种场景下都需要被用到.通常来说,使用表分区主要是用于:

  •      存档,比如将销售记录中1年前的数据分到一个专门存档的服务器中
  •      便于管理,比如把一个大表分成若干个小表,则备份和恢复的时候不再需要备份整个表,可以单独备份分区
  •      提高可用性,当一个分区跪了以后,只有一个分区不可用,其它分区不受影响
  •      提高性能,这个往往是大多数人分区的目的,把一个表分布到不同的硬盘或其他存储介质中,会大大提升查询的速度.

 

分区表的步骤


    分区表的定义大体上分为三个步骤:

  1.     定义分区函数
  2.     定义分区构架
  3.     定义分区表

    分区函数,分区构架和分区表的关系如下:

    


    分区表依赖分区构架,而分区构架又依赖分区函数.值得注意的是,分区函数并不属于具体的分区构架和分区表,他们之间的关系仅仅是使用关系.

    下面我们通过一个例子来看如何定义一个分区表:

     假设我们需要定义的分区表结构如下:

     


     列为自增列,orderid为订单id列,SalesDate为订单日期列,也就是我们需要分区的依据.

     下面我们按照上面所说的三个步骤来实现分区表.

 

 

定义分区函数


    分区函数是用于判定数据行该属于哪个分区,通过分区函数中设置边界值来使得根据行中特定列的值来确定其分区,上面例子中,我们可以通过SalesDate的值来判定其不同的分区.假设我们想定义两个边界值(boundaryValue)进行分区,则会生成三个分区,这里我设置边界值分别为2004-01-01和2007-01-01,则前面例子中的表会根据这两个边界值分成三个区:

    


    在MSDN中,定义分区函数的原型如下:

				
	

相关文章