时间:2021-07-01 10:21:17 帮助过:15人阅读
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。
分割现有的分区需要两个步骤:
加一条数据,致使原表如下:
执行那个长查询,显示如下:
现在,可以执行分割操作了:
--分割出来的分区数据存在在哪个文件组 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.
最后附上一句:CareySon大牛,我爱你。
本文学习自:http://www.cnblogs.com/CareySon/archive/2011/12/30/2307766.html
SQL Server 分区表
标签:str adb c89 行合并 基本 9.png 中文 html 设置