优化SQLServer——表和分区索引

概念:

           简单地说,分区是将大型的对象(如表)分成更小的且易于管理的小块。分区的基本单位是行,需要注意的是与分区视图不同的地方时,分区必须位于同一个数据库内。

分区的原因:

对于非常大的表在进行诸如数据库维护、备份或者还原操作的时候会消耗大量的时间;除此之外还会增加标的死锁或者并发性的问题的概率。当然我们也可以通过Database Tuning Advisor 运行工作负载,将对是否需要分区给出建议并生产代码。

创建分区的过程:

            1.创建分区函数来定义一种数据放置策略。

             create partition function years(datetime)

             as range right

             for values(‘时间点1’,’时间点2’…)

          如上面的代码。最左边的分区是小于时间点1的所有数据行数据,第二个分区是大于或者等于时间点1小于时间点2的所有分区,以此类推即可。范围函数制定范围的边界,left 和right 关键字制定数据库引擎按照升序从左到右进行排序时边界值属于左边或者右边,这里不难发现我们这个是right 那么边界值属于右边。默认为left。

            2.创建文件分组来支持分区函数。

               作为最佳实践,一般可以创建用户对象,并将它映射到主文件组之外的文件组,按照之前的情况我们建立文件组y01,y02,y03…

            3.创建分区方案来定义物理数据分布策略(将函数数据映射到文件组)。

               分区方案是将数据库对象映射到物理实体(文件组)然后映射到文件的方案。进行这种决策时必须考虑备份、还原和数据归档。这留到以后专门的文章来介绍这块。

               代码:create partition scheme yearscheme

               as partition years to y01,y02…

            4.创建分区函数创建表或索引。

                创建分区表的语法跟常规表相同,唯一不同是在分区架构而不是特定或默认的文件组中创建。

               create table 表名

                 (       字段1   类型 null,

                          字段2    类型 not null,

                          时间字段    datetime not null,…   

                         constraint  index

                         check([时间字段] >=‘时间点1’and [时间字段]<‘时间点2’)

                      ) on yearscheme

                    go

            5.享受对相应资源的重新定向查询。

              最后我们还要考虑存储对齐和索引对齐带来的好处。通过alert table 表名 switch partition 分区 to 表

以及alert partition function prderdaterandepfn() merge range (‘时间点’) 来切换和合并分区。

总结:

                  我们知道什么时候使用分区,也知道了分区是一种性能提高的可选项或者可管理性和可扩展性,根据上面的步骤可以很快建立分区,提高数据库的效率。同时我们也要注意其影响的一下功能,如:数据库的备份还原,索引的维护,数据管理策略,工作负载,并发性(查询并发和表分区锁)等。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏开源优测

python selenium - 利用excel实现参数化

前言 在进行软件测试或设计自动化测试框架时,一个比可避免的过程就是: 参数化,在利用python进行自动化测试开发时,通常会使用excel来做数据管理,利用xl...

30380
来自专栏开源优测

python selenium2示例 - 利用excel实现参数化

前言 在进行软件测试或设计自动化测试框架时,一个比可避免的过程就是: 参数化,在利用python进行自动化测试开发时,通常会使用excel来做数据管理,利用xl...

33170
来自专栏开源优测

python selenium - 利用excel实现参数化

前言 在进行软件测试或设计自动化测试框架时,一个比可避免的过程就是: 参数化,在利用python进行自动化测试开发时,通常会使用excel来做数据管理,利用xl...

39080
来自专栏JetpropelledSnake

Python中模块(Module)和包(Package)的区别

1. 模块(Module) 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。 为了编写可维护的代码,我们把很多...

495110
来自专栏林德熙的博客

C#判断文件属于文本或二进制

其实标题说错了,所有的文件储存都是二进制,但我们想区别的是那些可以当做文本来读的,如 .txt,.cs,.c 的文件和一般的不是文字的文件。 我们有什么办法可区...

47020
来自专栏张戈的专栏

Shell脚本的简单排错法及调试程序bashdb

Jboss 的研究稍有卡壳,那就来点基础教程好了。 与众多脚本语言一样,Shell 脚本在执行时出错是很常见的,最简单的原因无外乎脚本在编写的过程中出现了语法错...

40960
来自专栏架构之路

Linux下的make命令用法

Linux 下 make 命令是系统管理员和程序员用的最频繁的命令之一。管理员用它通过命令行来编译和安装很多开源的工具,程序员用它来管理他们大型复杂的项目编译问...

50240
来自专栏小灰灰

Logback 简明使用手册

主要内容 跑起来 配置项 工作原理 1. 统一日志输出 巴拉巴拉。。。 (为什么这么玩,有什么好处 google it) 说明: 本篇主要偏应用为主,介绍了如...

37290
来自专栏Java架构师历程

windows下出现mysql启动出现 ‘发生系统错误’ 1067

今天在windows下安装mysql,在启动时出现了发生‘系统错误 1067’的错误。

1.4K40
来自专栏Java后端生活

Linux(十一)权限管理

23070

扫码关注云+社区

领取腾讯云代金券