SQL Server 创建表分区

图片 16

先准备测试表

什么是表分区?
表分区其实就是将一个大表分成若干个小表。
表分区可以从物理上将一个大表分成几个小表,但是逻辑上还是一个表。所以当执行插入、更新等操作的时候,不需要我们去判断应该插入或更新到哪个表中。只需要插入大表中就可以了。SQL
Server会自动的将它放在对应的表中。对于查询也是一样,直接查询大表就可以了。

CREATE TABLE [dbo].[Employee] (  EmployeeNo INT IDENTITY(1,1) PRIMARY KEY,  EmployeeName NVARCHAR(50) NULL);

 

插入一些数据

如何创建分区表

INSERT Employee DEFAULT VALUES;GO 10000UPDATE Employee set EmployeeName = 'Employee ' + CONVERT(VARCHAR, EmployeeNo) 

一、创建文件组

创建文件组

其实可以使用默认的primary组,但是为了更方便管理以及提高运行速度,所以还是应该创建几个分组。

图片 1

1、使用SSMS创建文件组

创建文件(为了性能,可以设定文件Path分布在不同的磁盘分区上)

图片 2

图片 3

2、使用T-SQL创建文件组

创建分区准备

--alter database <数据库名> add filegroup <文件组名>
alter database webDB add filegroup group2013
alter database webDB add filegroup group2014
alter database webDB add filegroup group2015

图片 4

二、为文件组添加数据库文件

图片 5

1、使用SSMS添加数据库文件

选择分区列

图片 6

图片 7

2、使用T-SQL添加数据库文件

创建分区函数

--alter database <数据库名称> add file <数据标识> to filegroup <文件组名称>
alter database webDB add file
(
    name='web2013',
    filename='D:web2013.ndf',
    size=5mb,
    filegrowth=5mb
)
to filegroup group2013
alter database webDB add file
(
    name='web2014',
    filename='D:web2014.ndf',
    size=5mb,
    filegrowth=5mb
)
to filegroup group2014

alter database webDB add file
(
    name='web2015',
    filename='D:web2015.ndf',
    size=5mb,
    filegrowth=5mb
)
to filegroup group2015

图片 8

注意:尽可能的将不同的文件放在不同的硬盘分区里,或者独立硬盘中。这样可以加快SQL
Server运行速度。

创建分区框架

三、创建分区函数

图片 9

分区函数用来告诉SQL Server用什么样的规则进行分区,这一步必须使用T-SQL脚本来执行了。

定义边界值,分区,因为有5个边界值,所以需6个分区

create partition function fenqu(datetime) --分区函数名
as range right  --right分区方式 边界值去左表还是右表
for values ('2014-01-01','2015-01-01') --按这些值来分区 
--group2013 : 2014-01-01 之前的
--group2014 : 2014-01-01 到 2014-12-31的
--group2015 : 2015-01-01 之后的

图片 10

四、创建分区方案

图片 11

create partition scheme SchemeFenqu --分区方案名
as partition fenqu    --之前创建的分区函数
to(group2013,group2014,group2015) --跟放的文件组

图片 12

创建完分区函数和分区方案后可以在存储中查看

图片 13

图片 14

产生的脚本文件(换句话说上面的步骤等同于下面的语句)

五、创建分区表

USE [TestingDB]GOBEGIN TRANSACTIONCREATE PARTITION FUNCTION [EmpFunction](int) AS RANGE RIGHT FOR VALUES (N'2000', N'4000', N'6000', N'8000', N'10000')CREATE PARTITION SCHEME [FunScheme] AS PARTITION [EmpFunction] TO ([FileGroup1], [FileGroup2], [FileGroup3], [FileGroup4], [FileGroup5], [PRIMARY])ALTER TABLE [dbo].[Employee] DROP CONSTRAINT [PK__Employee__7AD0F1B633D4B598]ALTER TABLE [dbo].[Employee] ADD PRIMARY KEY CLUSTERED (  [EmployeeNo] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [FunScheme]([EmployeeNo])COMMIT TRANSACTION
create table fenquTable
(
    id int identity(1,1) not null,
    name varchar(20) not null,
    createTime datetime not null
) on SchemeFenqu(createTime) --调用分区方案

执行上面的SQL语句

注意:不可以使用聚集索引,因为聚集索引是存在连续的物理地址中的,而表分区是将数据分别存储在不同表中的。

其中语句ON
[FunScheme]([EmployeeNo])是关键,表明了表Employee依赖分区框架FunScheme来进行分区,分区的列为EmployeeNo

至此物理上分离的,逻辑上一体的分区表就创建完了。

而分区框架有依赖于分区函数,即分区表依赖分区框架,分区框架又依赖于分区函数

图片 15

查看表分区结果

操作分区表

图片 16

一、插入数据

--插入测试数据
insert into fenquTable(name,createTime) values ('隔壁老王','2010-01-01')
insert into fenquTable(name,createTime) values ('隔壁老张','2011-01-01')
insert into fenquTable(name,createTime) values ('隔壁老赵','2012-01-01')
insert into fenquTable(name,createTime) values ('隔壁老李','2013-01-01')
insert into fenquTable(name,createTime) values ('老李儿子','2013-10-01')
insert into fenquTable(name,createTime) values ('隔壁老田','2014-01-01')
insert into fenquTable(name,createTime) values ('隔壁老梁','2015-01-01')
insert into fenquTable(name,createTime) values ('老梁姑娘楠楠','2015-10-10')

发表评论

电子邮件地址不会被公开。 必填项已用*标注