SQL Server中分区表的用法


当前第2页 返回上一页

留意到分区构架已成功创建。

第三步、定义分区表

有了分区函数与分区构架,下面就可以创建分区表了,表在创建的时候就要决定是否是分区表了。

虽然在大部分情况下,都是在发现表太大时,才想到要分区。但是分区表只能够在创建的时候指定为分区表。

CREATE TABLE OrderRecords
  (
      Id int,
      OrderId int,
      SalesDate Date 
  )
  ON SchemaForParirion(SalesDate)    --SchemaForPartition是刚刚定义的分区架构,括号内为指定的分区列

然后手工向数据库里面添加3条数据:

然后执行查询:

select convert(varchar(50), ps.name)                  as partition_scheme,
       p.partition_number,
       convert(varchar(10), ds2.name)                 as filegroup,
       convert(varchar(19), isnull(v.value, ''), 120) as range_boundary,
       str(p.rows, 9)                                 as rows
from   sys.indexes i
       join sys.partition_schemes ps
         on i.data_space_id = ps.data_space_id
       join sys.destination_data_spaces dds
         on ps.data_space_id = dds.partition_scheme_id
       join sys.data_spaces ds2
         on dds.data_space_id = ds2.data_space_id
       join sys.partitions p
         on dds.destination_id = p.partition_number
            and p.object_id = i.object_id
            and p.index_id = i.index_id
       join sys.partition_functions pf
         on ps.function_id = pf.function_id
       left join sys.partition_range_values v
              on pf.function_id = v.function_id
                 and v.boundary_id = p.partition_number - pf.boundary_value_on_right
where  i.object_id = object_id('OrderRecords') --此处是表名
       and i.index_id in ( 0, 1 )
order  by p.partition_number

可以看到,分区起作用了:

四、分区表的分割

分区表的分割,相当于新建一个分区,将原有的分区需要分割的内容插入新的分区,然后删除老的分区的内容。
新加入多一个分割点:2009-01-01。如下图所示:

对于上图的操作,如果分割时,被分割的分区3内有内容需要分割到分区4,则这些数据需要被复制到分区4,并删除分区3上对应的数据。

这种操作非常非常消耗IO,并且在分割的过程中锁定分区3内的内容,造成分区3的内容暂时不可用。而且,这个操作生成的日志内容将会是被转移数据的4倍。

因此,最好在建表的时候,就要考虑到以后的分割点,比如预判到2014-01-01,2016-01-01。

分割现有的分区需要两个步骤:

  • 首先要告诉SQL Server新建立的分区放到哪个文件组
  • 建立新的分割点。

加一条数据,致使原表如下:

执行那个长查询,显示如下:

现在,可以执行分割操作了:

--分割出来的分区数据存在在哪个文件组
 ALTER PARTITION SCHEME SchemaForParirion 
    NEXT USED 'PRIMARY'
--添加分割点
 ALTER PARTITION FUNCTION fnPartition()
  SPLIT RANGE('2009-01-01')

执行完之后,再看结果如下:

五、分区表的合并

分区的合并可以旱作是分区分割的逆操作。分区的合并需要提供分割点,并且这个分割点必须在现有的分割表中已经存在,否则进行合并时就会报错。

例如,对以上例子,根据2009-01-01来进行合并:

合并分区操作:

--提供分割点,合并分区
ALTER PARTITION FUNCTION fnPartition()
  MERGE RANGE('2009-01-01')

再来看分区信息:

在这里应该注意到一个问题,假设已经合并了分区,那么合并之后,文件是存在分区3的文件组呢,还是分区4的文件组呢?这个取决于我们刚开始时定义的分区函数是left还是right。

如果定义的是left,则左边的分区3合并到分区4。如果是right,则右边的分区4合并到分区3.

到此这篇关于SQL Server分区表的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。


标签:SQL

返回前面的内容

相关阅读 >>

sql server 2000 清理日志精品图文教程

sqlserver 数据库故障修复顶级技巧之一

如何用sql打印出不同的三角形状?(示例)

spark sql实现日志离线批处理

当忘记 sql server 管理员密码该如何处理

navicat怎么导入sql

mybatis 动态sql搭建环境的全过程

sql实现leetcode(184.系里最高薪水)

sql server中分区表的用法

sql语言具有的功能

更多相关阅读请进入《sql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...