• 【转】图解Sql2005创建分区表的全过程


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

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

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

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

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


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

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

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

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

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

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

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

    CREATE PARTITION FUNCTION partfunSale (datetime)   
    AS RANGE RIGHT FOR VALUES ('20100101','20110101','20120101','20130101')

    其中:

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

        2、partfunSale为分区函数名称。

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

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

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

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

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

    复制代码
    CREATE PARTITION SCHEME partschSale   
    AS PARTITION partfunSale
    TO (
    Sale2009,
    Sale2010,
    Sale2011,
    Sale2012,
    Sale2013)
    复制代码

    其中:

        1、CREATE PARTITION SCHEME意思是创建一个分区方案。

        2、partschSale为分区方案名称。

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

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

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

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

    复制代码
    CREATE TABLE Sale(   
    [Id] [int] IDENTITY(1,1) NOT NULL,
    /*如果直接在这里指定 primary key 则会报"唯一索引的分区依据列必须是索引键的子集" 的错误 */
    [Name] [varchar](16) NOT NULL,
    [SaleTime][datetime] NOT NULL
    CONSTRAINT [PK_tbTest] PRIMARY KEY NONCLUSTERED
    (
    [Id] ASC
    )on [primary]
    ) ON partschSale([SaleTime
    ])
    复制代码

    其中:

        1、CREATE TABLE 意思是创建一个数据表。
        2、Sale为数据表名。
       
    3、()中为表中的字段,这里的内容和创建普通数据表没有什么区别,惟一需要注意的是不能再创建聚集索引了。道理很简单,聚集索引可以将记录在物理上顺序存储的,而分区表是将数据分别存储在不同的表中,这两个概念是冲突的,所以,在创建分区表的时候就不能再创建聚集索引了。
       4、ON partschSale()说明使用名为partschSale的分区方案。
      5、partschSale()括号中为用于分区条件的字段是SaleTime。

    OK,一个物理上是分离的,逻辑上是一体的分区表就创建完毕了。查看该表的属性,可以看到该表已经属于分区表了.

    --查看分区情况
    SELECT $PARTITION.partfunSale([SaleTime]) AS Partition,COUNT(*) AS [COUNT] FROM Sale
    GROUP BY $PARTITION.partfunSale([SaleTime])
    ORDER BY Partition
  • 相关阅读:
    CSP-S 2020 游记
    USACO Mowing the Lawn
    洛谷 P1725 琪露诺
    浅谈单调队列
    浅谈单调栈
    洛谷 P1440 求m区间内的最小值
    POJ 2823 Sliding Window
    洛谷 P1901 发射站
    POJ 2796 Feel Good
    POJ 2559 Largest Rectangle in a Histogram
  • 原文地址:https://www.cnblogs.com/zhuawang/p/3560589.html
Copyright © 2020-2023  润新知