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


    更新记录
    转载请注明出处: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开销

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

    创建分区方案

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

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

    语法:

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

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

    创建表时指定分区语法:

    1. CREATE TABLE [表名]
    2. (
    3. ) ON 分区方案名称(表中与分区对应的字段)

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

    聚集索引分区:

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

    创建表分区-使用SSMS

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

    选择分区的列image

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

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

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

    创建索引分区-使用SSMS

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

    实例:为表创建分区方案

    新建数据库

    1. GO
    2. -- 创建分区数据库
    3. CREATE DATABASE [PandaDatabase2]
    4. ON PRIMARY
    5. (
    6. NAME = 'PandaDatabase2',
    7. FILENAME = 'C:\test2\PandaDatabase2.mdf',
    8. SIZE = 100MB,
    9. MAXSIZE = UNLIMITED,
    10. )
    11. LOG ON
    12. (
    13. NAME = 'PandaDatabase2Log',
    14. FILENAME = 'C:\test2\PandaDatabase2Log.ldf',
    15. SIZE = 100MB,
    16. MAXSIZE = UNLIMITED,
    17. );
    18. GO

    创建数据库文件组

    1. GO
    2. ALTER DATABASE [PandaDatabase2]
    3. ADD FILEGROUP FileGroup2018;
    4. ALTER DATABASE [PandaDatabase2]
    5. ADD FILE
    6. (
    7. NAME = 'PandaDatabase2_2018',
    8. FILENAME = 'C:\test2\PandaDatabase2_2018.ndf',
    9. SIZE = 100MB,
    10. MAXSIZE = UNLIMITED
    11. ) TO FILEGROUP [FileGroup2018];
    12. ALTER DATABASE [PandaDatabase2]
    13. ADD FILEGROUP FileGroup2019;
    14. ALTER DATABASE [PandaDatabase2]
    15. ADD FILE
    16. (
    17. NAME = 'PandaDatabase2_2019',
    18. FILENAME = 'C:\test2\PandaDatabase2_2019.ndf',
    19. SIZE = 100MB,
    20. MAXSIZE = UNLIMITED
    21. ) TO FILEGROUP [FileGroup2019];
    22. ALTER DATABASE [PandaDatabase2]
    23. ADD FILEGROUP FileGroup2020;
    24. ALTER DATABASE [PandaDatabase2]
    25. ADD FILE
    26. (
    27. NAME = 'PandaDatabase2_2020',
    28. FILENAME = 'C:\test2\PandaDatabase2_2020.ndf',
    29. SIZE = 100MB,
    30. MAXSIZE = UNLIMITED
    31. ) TO FILEGROUP [FileGroup2020];
    32. ALTER DATABASE [PandaDatabase2]
    33. ADD FILEGROUP FileGroup2021;
    34. GO

    创建分区函数

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

    创建分区方案

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

    应用到指定表

    1. GO
    2. -- 应用到指定表
    3. -- 注意不可以有主键约束
    4. USE PandaDatabase2;
    5. CREATE TABLE PandaTable4
    6. (
    7. Id INT,
    8. Name CHAR(30) NOT NULL,
    9. join_datetime DATETIME
    10. )
    11. ON PandaDatabaseSchema(join_datetime);

    测试插入数据

    1. INSERT INTO [PandaTable4] VALUES(1,'Panda666','2020-3-30');
    2. INSERT INTO [PandaTable4] VALUES(2,'Dog666','2019-3-30');
    3. INSERT INTO [PandaTable4] VALUES(3,'Dog666','2018-3-30');
    4. INSERT INTO [PandaTable4] VALUES(4,'Dog666','2018-2-10');
  • 相关阅读:
    ROS从入门到精通5-3:插件库与开发+实例分析
    Python数据分析-4
    2 files found with path ‘META-INF/lib_release.kotlin_module’
    基于SQL企业信使运营平台
    【编译原理】-- 递归下降语法分析设计原理与实现(C语言实现)
    洛谷P4799 [CEOI2015 Day2] 世界冰球锦标赛
    代码随想录笔记_动态规划_337打家劫舍III
    400企业热线电话
    Java8 新特性之Stream(五)-- Stream的3种创建方法
    五个维度着手MySQL的优化,我和面试官都聊嗨了
  • 原文地址:https://blog.csdn.net/weixin_38304160/article/details/126221465