ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

SQL Server教程 - SQL SERVER 分区(PARTITION)

2022-08-08 07:30:19  阅读:461  来源: 互联网

标签:方案 SQL 创建 分区 PARTITION Server 索引 PandaDatabase2 GO


更新记录
转载请注明出处:https://www.cnblogs.com/cqpanda/p/16556437.html
2022年8月8日 发布。
2022年8月6日 从笔记迁移到博客。

SQL SERVER 分区(PARTITION)

分区说明

将数据放在不同的物理设备中

分区的好处

提高可维护性,降低维护难度

提高性能

分区的过程步骤

创建分区函数
创建分区方案
将分区方案应用到表上

可以在以下对象上分区:
无聚集索引的表(堆)
聚集索引
唯一索引
非聚集索引
注意:聚集索引分区时,需要指定的分区必须包含在聚集键中
如果要将分区的聚集或者非聚集索引不唯一,则分区列无需包含在键中
对于唯一索引(不论聚集非聚集)都必须包含分区列作为唯一索引键的一部分

创建分区函数

创建分区函数作用:指定根据表的某一列数据,将数据分配或映射到不同的分区中

注意:不能用作分区的字段数据类型是:
ext、ntext、image、xml、timestamp、varchar(max)、nvarchar(max)、varbinary(max)
自定义的别名数据类型、公共语言运行库(CLR)用户定义数据类型

常用的分区函数使用的数据类型是:日期类型 和 整数类型
表或索引可以创建的最大分区数量为15000个

通常为了简化维护、改进性能,建议将每个分区放置在不同的文件组中
创建文件组时,务必使文件组的数据比分区函数中指定的边界值的数据多一个
文件组应当放置在不同的物理磁盘上,以分摊I/O开销

CREATE PARTITION FUNCTION [分区名] (分区数据类型)
AS RANGE [LEFT | RIGHT]
FOR VALUES('分割边界值','分割边界值','分割边界值',...);

创建分区方案

创建分区方案的作用:
将数据放在正确的文件组中
将分区函数创建的分区与文件组对应起来

创建分区方案需要设置的4个参数:
分区方案的名称
分区函数的名称,在分区方案创建之前必须先创建分区函数
ALL,使用该参数,文件组的数量为1
文件组列表

语法:

CREATE PARTITION SCHEME [分区方案名称]
AS PARTITION [分区函数名称]
TO(对应文件组1,对应文件组2,对应文件组3,对应文件组4);

将分区应用到表上-使用T-SQL

创建表时指定分区语法:

CREATE TABLE [表名]
(

) ON 分区方案名称(表中与分区对应的字段)

将分区应用到索引上-使用T-SQL

聚集索引分区:

CREATE CLUSTERED INDEX [索引名]
ON [表名](创建索引的字段名)
WITH(DROP_EXISTING = ON)
ON [分区方案名] (表中与分区方案对应的字段名);

创建表分区-使用SSMS

选中要分区的表或者索引
image

选择分区的列
image

选择新建分区函数 或 使用已经定义的分区函数
image

选择新建分区方案 或 使用已经建好的分区方案
image

确定分区方案的 范围 和 文件组
image

创建索引分区-使用SSMS

选择要进行分区的索引,进入分区页面

实例:为表创建分区方案

新建数据库

GO
-- 创建分区数据库
CREATE DATABASE [PandaDatabase2]
ON PRIMARY
(
    NAME = 'PandaDatabase2',
    FILENAME = 'C:\test2\PandaDatabase2.mdf',
    SIZE = 100MB,
    MAXSIZE = UNLIMITED,
)
LOG ON
(
    NAME = 'PandaDatabase2Log',
    FILENAME = 'C:\test2\PandaDatabase2Log.ldf',
    SIZE = 100MB,
    MAXSIZE = UNLIMITED,
);
GO

创建数据库文件组

GO
ALTER DATABASE [PandaDatabase2]
ADD FILEGROUP FileGroup2018;

ALTER DATABASE [PandaDatabase2]
ADD FILE
(
    NAME = 'PandaDatabase2_2018',
    FILENAME = 'C:\test2\PandaDatabase2_2018.ndf',
    SIZE = 100MB,
    MAXSIZE = UNLIMITED
) TO FILEGROUP [FileGroup2018];

ALTER DATABASE [PandaDatabase2]
ADD FILEGROUP FileGroup2019;

ALTER DATABASE [PandaDatabase2]
ADD FILE
(
    NAME = 'PandaDatabase2_2019',
    FILENAME = 'C:\test2\PandaDatabase2_2019.ndf',
    SIZE = 100MB,
    MAXSIZE = UNLIMITED
) TO FILEGROUP [FileGroup2019];

ALTER DATABASE [PandaDatabase2]
ADD FILEGROUP FileGroup2020;

ALTER DATABASE [PandaDatabase2]
ADD FILE
(
    NAME = 'PandaDatabase2_2020',
    FILENAME = 'C:\test2\PandaDatabase2_2020.ndf',
    SIZE = 100MB,
    MAXSIZE = UNLIMITED
) TO FILEGROUP [FileGroup2020];

ALTER DATABASE [PandaDatabase2]
ADD FILEGROUP FileGroup2021;

GO

创建分区函数

GO
-- 创建分区函数
CREATE PARTITION FUNCTION [PandaDatabaseFunction] (DATETIME)
AS RANGE LEFT
FOR VALUES('20181231','20191231','20201231');
GO

创建分区方案

GO
-- 创建分区方案
-- 注意:分区方案中的文件组必须多于分区函数中的个数
CREATE PARTITION SCHEME [PandaDatabaseSchema]
AS PARTITION [PandaDatabaseFunction]
TO(FileGroup2018,FileGroup2019,FileGroup2020,FileGroup2021);
GO

应用到指定表

GO
-- 应用到指定表
-- 注意不可以有主键约束
USE PandaDatabase2;
CREATE TABLE PandaTable4
(
    Id INT,
    Name CHAR(30) NOT NULL,
    join_datetime DATETIME
)
ON PandaDatabaseSchema(join_datetime);

测试插入数据

INSERT INTO [PandaTable4] VALUES(1,'Panda666','2020-3-30');
INSERT INTO [PandaTable4] VALUES(2,'Dog666','2019-3-30');
INSERT INTO [PandaTable4] VALUES(3,'Dog666','2018-3-30');
INSERT INTO [PandaTable4] VALUES(4,'Dog666','2018-2-10');

标签:方案,SQL,创建,分区,PARTITION,Server,索引,PandaDatabase2,GO
来源: https://www.cnblogs.com/cqpanda/p/16556437.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有