当一个数据表的数据量达到千万级别以后,每次查询都需要消耗大量的时间,所以当表数据量达到一定量级后我们需要对数据表水平切割。水平分区分表就是把逻辑上的一个表,在物理上按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小文件放在不同的磁盘下。这样把一个大的文件拆分成多个小文件,便于我们对数据的管理。

下面我们来创建表分区

代码创建分区表

添加文件组

代码格式:

ALTER DATABASE <数据库名称> ADD FILEGROUP<文件组名>

代码示例:

ALTER DATABASE TestDb ADD FILEGROUP TestDbFileGroup

添加文件

代码格式:

ALTER DATABASE<数据库名称>ADD FILE <数据标识> TO FILEGROUP<文件组名称>

注意:数据标识中name为逻辑文件名、filename为物理文件路径名、size为文件初始大小(单位:kb/mb/gb/tb)、filegrowth为文件自动增量(单位:kb/mb/gb/tb)、maxsize为文件增大的最大大小(单位:kb/mb/gb/tb/unlimited)
代码示例:

ALTER DATABASE TestDb ADD FILE (NAME='TestFile1',FILENAME='D:\ProgramFiles\Microsoft SQL Server\MSSQL\DATA\TestFile1.mdf',   SIZE=5MB,   FILEGROWTH=5MB)
TO FILEGROUP TestFileGroup

定义分区函数

分区函数是用于判定数据行该属于哪个分区,通过分区函数中设置边界值来使得根据行中特定列的值来确定其分区。
代码格式:

CREATE PARTITIONFUNCTION partition_function_name(input_parameter_type )
ASRANGE[ LEFT | RIGHT ]
FORVALUES( [ boundary_value [ ,...n ] ])

其中“LEFT”和“RIGHT”决定了“VALUES”中的边界值被划分到哪一个分区中(即,边界值属于左侧分区还是右侧分区)。
代码示例:

CREATE PARTITIONFUNCTION TestPartitionFunction(datetime2(0))
ASRANG ERIGHT
FORVALUES('2018-01-01 00:00:00','2019-01-01 00:00:00')

查看分区函数是否创建成功:

SELECT *FROM sys.partition_functions

定义分区架构

定义完分区函数仅仅是知道了如何将列的值区分到了不同的分区,而每个分区的存储方式,则需要分区构架来定义。分区构架仅仅是依赖分区函数.分区构架中负责分配每个区属于哪个文件组,而分区函数是决定如何在逻辑上分区。
代码格式:

CREATE PARTITIONSCHEME partition_scheme_name
ASPARTITION partition_function_name [ ALL ]
TO(  { file_group_name | [ PRIMARY ] } [ ,...n ])

代码示例:

CREATE PARTITIONSCHEME TestPartitionScheme
ASPARTITION TestPartitionFunction
TO (TestFileGroup,[PRIMARY],TestFileGroup)

查看分区架构是否创建完成:

SELECT *FROM sys.partition_schemes

定义分区表

表在创建的时候就已经决定是否是分区表了。虽然在很多情况下都是你在发现已经表已经足够大的时候才想到要把表分区,但是分区表只能够在创建的时候指定为分区表。
代码格式:

CREATE TABLE table_name(
...
) ON partition_scheme_name(column_name)

代码示例:

CREATE TABLE dt(id BIGINT,date datetime2(0),desc varchar(50)
) ON TestPartitionScheme(date)

界面向导表分区

创建文件组

右键数据库,选择“属性”

在属性界面中,点击箭头所示的“文件组”选项,进入文件组编辑界面

在文件组管理界面中点击箭头①所示的“添加”选项,添加新的文件组,界面中会出现箭头②所示的属性框,并键入对应的属性值,之后点击“确定”,完成新建文件组。

添加文件

和添加文件组的方式一样,右键数据库,选择“属性”,打开数据库属性界面,这次选择“文件”,打开文件管理界面

在文件管理界面中,点击箭头①所示的“添加”选项,添加新的文件,在新添加的箭头②所示的区域,根据实际需求,填写对应的文件属性值,填写完成后点击“确定”。其中,一个文件组中可以添加多个文件,即“文件组”属性的值是可以重复的。

定义分区表

在SQL Server 2012 Management Studio的界面中,找到目标数据库下的“表”菜单,右键点击,选择“新建数据库表”,打开新建数据库表界面,新建一个分区表。

添加分区函数和分区架构

完成新建分区表后,我们就可以在分区表上添加分区函数和分区架构了。右键点击分区表,选择“存储”,然后选择“创建分区”,开始添加分区函数和分区架构

点击“下一步”

选择分区列

填写分区函数

填写分区架构

指定文件组

按照图示箭头步骤,一步步设置文件组参数。首先选择分区边界值划分在左边界分区还是右边界分区,然后进行第二步,设置分区所属文件组,再设置分区边界值(该值要与分区表的分区字段类型对应),最后点击“预计存储空间(E)”对其他参数进行自动填充。设置完成后点击“下一步”

脚本设置

根据实际需求完成最后的设置(一般不做设置),然后点击“完成”,在下一个界面中再次点击“完成”,然后等待数据库执行操作,最后关闭界面。
分区完成后,右键点击分区表,选择“属性”,然后选择“存储”

表分区查看

在已分区的表上创建索引(分区索引)时,应该注意以下事项:
l  唯一索引
建立唯一索引(聚集或者非聚集)时,分区列必须出现在索引列中。此限制将使SQL Server只调查单个分区,并确保表中宠物的新键值。如果分区依据列不可能包含在唯一键中,则必须使用DML触发器,而不是强制实现唯一性。
l  非唯一索引
对非唯一的聚集索引进行分区时,如果未在聚集键中明确指定分区依据列,默认情况下SQL Server 将在聚集索引列中添加分区依据列。
对非唯一的非聚集索引进行分区时,默认情况下SQL Server 将分区依据列添加为索引的包含性列,以确保索引与基表对齐,若果索引中已经存在分区依据列,SQL Server 将不会像索引中添加分区依据列。

表分区的优点:

1、改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。 
2、增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用; 
3、维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可; 
4、均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能。

表分区的缺点:

已经存在的表没有方法可以直接转化为分区表

什么时候使用分区表:

1、表的大小超过2GB。 
2、表中包含历史数据,新的数据被增加都新的分区中。

SQL Server数据库分区分表相关推荐

  1. sql server 数据库分区分表

    sql server 数据库分区分表 作为演示,本文使用的数据库 sql server 2017 管理工具 sql server management studio 18,,创建数据库mytest,添 ...

  2. 清空SQL Server数据库中所有表数据的方法(转)

    清空SQL Server数据库中所有表数据的方法 其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入 ...

  3. 数据库分区分表以及读写分离

    数据库分区分表以及读写分离 Oracle数据库分区是作为Oracle数据库性能优化的一种重要的手段和方法,做手头的项目以前,只聆听过分区的大名,感觉特神秘,看见某某高手在讨论会上夸夸其谈时,真是骂自己 ...

  4. 用友U8的SQL SERVER 数据库结构说明表

    用友U8的SQL SERVER 数据库结构说明表       在帐套中的两个表,一个表是RPT_GRPDEF,存放帐套中重要的表名及相关说明:另一个是RPT_ITMDEF,存放的是主要表中的相关字段说 ...

  5. sql server数据库备份单个表的结构和数据生成脚本

    1.使用场景:sql server数据库备份单个表的结构和数据,在我们要修改正式系统的数据的一天或者多条某些数据时候,要执行update语句操作,安全稳健考虑,最好先做好所修改的表的结构和数据备份! ...

  6. SQL Server 数据库之单表查询

    单表查询 1. 概述 2. 单表查询命令 2. 无条件查询与条件查询 2.1 无条件查询 2.2 条件查询 3. 聚集函数 4. 分组查询 5. 排序查询 1. 概述 单表查询是只对一个数据表进行查询 ...

  7. SQL Server数据库中所有表及字段信息

    程序思想:用SELECT name From sysobjects WHERE xtype = 'u'得到所有表,然后循环打开表,根据Rs_Colums.Fields(I).Name 得到字段名,Fi ...

  8. 用Excel VBA连接SQL Server数据库并将表中的数据显示到Excel中

    本实例使用VB语言和OLEDB类连接SQL Server 2005数据库. 在sheet1上右键→查看代码,加入如下代码: Sub admin()Dim conn, xRsSet conn = Cre ...

  9. 关于SQL Server数据库如何添加表?

    开发工具与关键技术:SQL.Server2014 SQL 作者:Mr.黄 撰写时间:2021/5/25 注意看红色箭头 首先,打开SQL Server 2014(

最新文章

  1. BZOJ 2039: [2009国家集训队]employ人员雇佣
  2. JavaScript 知识图谱
  3. nRF52832的UICR
  4. AndroidManifest中activity属性设置大全
  5. mysql workbench启动_怎么启动mysql workbench
  6. 幕客网学习摘要记录1
  7. mysql 中用select建表_用 SELECT 的结果创建表
  8. 论文流程图——使用VISIO制作论文中的流程图
  9. java经典算法(四)---zws
  10. word画图关闭自动捕捉功能
  11. java rds 数据库_java项目连接rds数据库
  12. heka 0.11.0源码分析--主要启动流程分析
  13. ffmpeg音频格式转码(编码器)
  14. 解决memory leak问题
  15. 什么是市盈率(PE)?
  16. 理论分析 | 势流理论与水动力
  17. 打造一个无广告无弹窗快速的Windows办公环境(软件推荐)
  18. linux+++乘法口诀_通过shell脚本打印乘法口诀表
  19. NO.1——VulnHub-GoldenEye-1-Walkthrough
  20. 三星4418核心板 世界上最小的A9核心模块 性能强大

热门文章

  1. 4-10:TCP协议之面向字节流和粘包问题
  2. Linux系统调用Hook姿势总结
  3. 套接字I/O模型-重叠I/O
  4. 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
  5. shell脚本判断上一个命令是否执行成功
  6. Kali aircrack-ng wifi密码破解(暴力)(1)
  7. 判断Python输入是否为数字
  8. iOS字符串常用用法
  9. 详解6G系统数据治理方案的设计要点和原则
  10. 什么是大数据「实时流计算」?深度解析它的4大应用及4个特点