Sqlserver分表(⽔平分表)
原⽂:
先搬过来,留着以后可能⽤
需求说明:
将数据库Demo中的表按照⽇期字段进⾏⽔平分区分表。要求数据⽂件按⼀年⼀个⽂件存储,且分区的分割点会根据时间的增长⾃动添加(例如现在是2017年1⽉1⽇,将其作为⼀个分割点,即将2017年1⽉1⽇之前的数据存储到数据⽂件A中,将2017年1⽉1⽇的之后的数据存储到数据⽂件B中;当时间到2018年1⽉1⽇时,⾃动将2018年1⽉1⽇添加为⼀个新的分区分割点,并将2017年1⽉1⽇⾄2018年1⽉1⽇的数据存储在数据⽂件B中,将2018年1⽉1⽇之后的数据存储在⼀个新的数据⽂件C中,以此类推)。
需求实现
1. 分区原理:
要实现这⼀功能,⾸先要了解数据库对⽔平分区表进⾏分区存储的原理。
所谓⽔平分区分表,就是把逻辑上的⼀个表,在物理上按照你指定的规则分放到不同的⽂件⾥,把⼀个⼤的数据⽂件拆分为多个⼩⽂件,还可以把这些⼩⽂件放在不同的磁盘下。这样把⼀个⼤的⽂件拆分成多个⼩⽂件,便于我们对数据的管理。
2. 分区的优点
存档,⽐如将销售记录中1年前的数据分到⼀个专门存档的服务器中
便于管理,⽐如把⼀个⼤表分成若⼲个⼩表,则备份和恢复的时候不再需要备份整个表,可以单独备份分区
提⾼可⽤性,当⼀个分区跪了以后,只有⼀个分区不可⽤,其它分区不受影响
提⾼性能,这个往往是⼤多数⼈分区的⽬的,把⼀个表分布到不同的硬盘或其他存储介质中,会⼤⼤提升查询的速度.
3. 实现思路
① 创建数据库
② 在创建的数据库中添加⽂件组
③ 在⽂件组中添加新的⽂件
④ 定义分区函数
⑤ 定义分区架构
⑥ 定义分区表
⑦ 定义代理作业,⾃动添加分区分割点
⑧ 测试数据
注意:
分区表依赖于分区架构,⽽分区架构⼜依赖与分区函数,所以在穿件分区函数、分区架构、分区表是要按照对应的顺序创建。
分区函数并不属于具体的分区架构和分区表,它们之间仅仅是使⽤关系。
分区表只能在创建的时候指定为分区表
实现步骤
原博主整理了两种,通过代码和sqlserver2012 Management Studio界⾯创建,下⾯先放代码:
3.1.1 创建数据库
新建数据库,并将其命名为Demo
3.1.2 添加⽂件组
代码格式:
ALTER DATABASE <;数据库名称> ADD FILEGROUP<⽂件组名>
代码⽰例:
ALTER DATABASE DemoADD FILEGROUP DemoFileGroup
3.1.3 添加⽂件
代码格式:
ALTER DATABASE <;数据库名称> ADD FILE <;数据标识> TO FILEGROUP<⽂件组名称>
注意:数据标识中name为逻辑⽂件名、filename为物理⽂件路径名、size为⽂件初始⼤⼩(单位:kb/mb/gb/tb)、filegrowth为⽂件⾃动增量(单位:kb/mb/g b/tb)、maxsize为⽂件增⼤的最⼤⼤⼩(单位:kb/mb/gb/tb/unlimited)
代码⽰例:
ALTER DATABASEDemo ADD FILE (
sqlserver备份表语句NAME='DemoFile1',
FILENAME='D:\ProgramFiles\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\DemoFile1.mdf',
SIZE=5MB,
FILEGROWTH=5MB)
TOFILEGROUP DemoFileGroup
在此我们重复执⾏⽰例代码,在⽰例⽂件组下添加三个⽂件。
3.1.4 定义分区函数
分区函数是⽤于判定数据⾏该属于哪个分区,通过分区函数中设置边界值来使得根据⾏中特定列的值来确定其分区。
代码格式:
CREATE PARTITIONFUNCTION partition_function_name( input_parameter_type )
ASRANGE [ LEFT | RIGHT ]
FORVALUES ( [ boundary_value [ ,...n ] ] )
[ ; ]
其中“LEFT”和“RIGHT”决定了“VALUES”中的边界值被划分到哪⼀个分区中(即,边界值属于左侧分区还是右侧分区)。
代码⽰例:
CREATE PARTITIONFUNCTION DemoPartitionFunction( datetime2(0) )
ASRANGE RIGHT
FORVALUES ('2016-01-01 00:00:00','2017-01-01 00:00:00')
查看分区函数是否创建成功:
SELECT * FROM sys.partition_functions
3.1.5 定义分区架构
定义完分区函数仅仅是知道了如何将列的值区分到了不同的分区,⽽每个分区的存储⽅式,则需要分区构架来定义。分区构架仅仅是依赖分区函数.分区构架中负责分配每个区属于哪个⽂件组,⽽分区函数是决定如何在逻辑上分区。
代码格式:
CREATE PARTITIONSCHEME partition_scheme_name
ASPARTITION partition_function_name
[ ALL ]TO ( { file_group_name | [ PRIMARY ] } [ ,...n ] )
[ ; ]
代码⽰例:
CREATE PARTITIONSCHEME DemoPartitionScheme
ASPARTITION DemoPartitionFunction
TO ( DemoFileGroup,[PRIMARY],DemoFileGroup)
查看分区架构是否创建完成:
SELECT * FROM sys.partition_schemes
3.1.6 定义分区表
表在创建的时候就已经决定是否是分区表了。虽然在很多情况下都是你在发现已经表已经⾜够⼤的时候才想到要把表分区,但是分区表只能够在创建的时候指定为分区表。
代码格式:
CREATE TABLEtable_name(
...
) ONpartition_scheme_name(column_name)
代码⽰例:
CREATE TABLEDemoTable(
demo_id BIGINT,
demo_date datetime2(0),
demo_desc varchar(50)
) ONDemoPartitionScheme(demo_date)
通过图形化界⾯创建
3.2.1 创建数据库
右键点击“数据库”,选择第⼀项“新建数据库(N)…”,新建数据库,如图1所⽰:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。