优化SQLServer——表和分区索引

优化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 (‘时间点’) 来切换和合并分区。

 

 

    总结:

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

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119746.html原文链接:https://javaforall.net

(0)
上一篇 2021年11月25日 上午10:00
下一篇 2021年11月25日 上午11:00


相关推荐

  • Git 常用命令

    Git 常用命令

    2021年9月17日
    52
  • 什么是pisa测试_PISA测试很专业,但对理解什么是教育很重要

    什么是pisa测试_PISA测试很专业,但对理解什么是教育很重要原标题:PISA测试很专业,但对理解什么是教育很重要PISA是一项比IMO(奥数)规模更大、样本更全、参考价值更高的各国学生学习能力测试,可以准确观察国家国基础教育存在的问题。一什么是PISA测试?度娘:PISA(ProgramforInternationalStudentAssessment)(国际学生评估项目)是由联合国经济合作与发展组织(OrganizationforEconomi…

    2022年5月3日
    68
  • Python开发环境Wing IDE使用教程:部分调试功能介绍

    Python开发环境Wing IDE使用教程:部分调试功能介绍

    2021年8月26日
    58
  • 双目测距理论及其python实现

    双目测距理论及其python实现一、双目测距基本流程双目测距属于双目SLAM的一个应用领域。关于双目测距的基本原理,其实并不复杂,但说起来内容也不少,其核心原理就是三角测量,三角测量在土地测量、天文测量等领域都得到了广泛应用,是一种很好的测距方法。为了对双目测距的内容有一个很好的认识大家可以先看一下这个博客,讲的挺的不错的:https://blog.csdn.net/piaoxuezhong/article…

    2022年7月15日
    22
  • 10分钟就能学会,Linux操作系统21个shell常用命令

    10分钟就能学会,Linux操作系统21个shell常用命令目录一、shell的基本形式1.shell的种类:sh、bash、csh、tcsh、ash等。(1).shshell(2).cshshell(3).tcshshell(4).ashshell(5).bashshell2.shell命令的基本格式3.注意1.Linux严格区分大小写,aA不同2.使用分号(;)一行中输入多个命令。3.按下Table键,自动补齐命令、目录或文

    2022年10月17日
    5
  • winhttp 访问https_「winhttp」C++用winhttp实现https访问服务器 – seo实验室

    winhttp 访问https_「winhttp」C++用winhttp实现https访问服务器 – seo实验室winhttp由于项目升级,在数据传输过程中需要经过oauth2.0认证,访问服务器需要https协议。首先,实现C++代码访问https服务器,实现Get和post功能,在网上搜索一通,发现各种各样的都有,有的很简单,有的稍微复杂。结果MSDN介绍的比较简洁一点官方网址:https://docs.microsoft.com/en-us/windows/desktop/winhttp/ssl-i…

    2022年7月11日
    32

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号