随着业务的不断扩大,原始设计的单表单库已经不能满足实际业务场景,并发量大的时候数据库I/O已经开始排队了,这时需要着手于数据库优化。这样的业务场景单纯增加索引已经不足够应付业务了,这个时候我们就要开始考虑SQL SERVER的表分区(Partition)了。
表分区是一项需要长期维护周期变更的操作,分区的意义在于将大数据从物理上切割成几个互相独立的小部分,这样我们在查询的时候只取出其中一个或者几个分区,减少查找的数据量。对于不同文件组的分区,并行查询的性能要高于对整个表的查询性能。下面介绍详细操作。
分区列
在管理器中,找到需要分区的表,右键 ——>储存——>创建分区,会弹出如下窗口:
要注意向导中说到的,可以创建用于对表进行分区的脚本,可以立即运行该脚本,或者为表分区安排作业。我第一次尝试的时候把脚本保存下来就以为会自动执行,傻傻的不知道等了多久(:手动狗头
点击下一步后如下图所示,需要选择一项分区列,这里会列出包括列名、数据类型、长度、精度、刻度的信息,我们可以根据业务去选择合适的列区作为分区列。而以下类型的列不可用于分区:text、ntext、image、xml、timestamp、varchar(max)、nvarchar(max)、varbinary(max)、别名、hierarchyid、空间索引或 CLR 用户定义的数据类型。此外,如果使用计算列作为分区列,则必须将该列设为持久化列(Persisit)。如图测试表我们选择时间为分区列。下边有两个选项:
- 将此表与选定的分区表并置
此处是要求在同一数据库下有另一张已经分好区的表,同时这张表的分区列和当前选中的列的类型完全一致。 -
将存储区中的所有非唯一和唯一索引与索引分区列对齐
这样会将表中的所有索引也一同分区,实现“对齐”。
分区函数与分区方案
在之前的一步选好分区列之后,如果没有选择“将此表与选定的分区表并置”选项,接下来就会进入选择创建分区函数以及分区方案的界面,分区函数需要指定分区边界,分区方案是规划了文件组。
左边界是指每个分区的边界值被包含在边界值左侧的分区,也就是每个分区内的数据约束是<=指定的边界值,所以,右边界指的就是每个分区的边界值被包含在边界值右侧的分区中,每个分区内的数据约束是<指定的边界值。
有一个需要注意的地方是,在最后一个分区是没有制定边界的,用于保存所有>左边界或<=右边界最后一个分区边界的数据,截图还没给设置文件组,这个是一定需要设置的。之后点击下一步如下图所示,
这个可以自己选择。
接下来更详细的有时间再更新吧~~~
想写一些东西分享,欢迎转载,请注明出处。
简书-板凳儿儿
https://www.jianshu.com/p/eaa44dea7bfb