优化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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 官网下载jdk要下载低版本的jdk总是找半天也找不到,怎么办[通俗易懂]

    官网下载jdk要下载低版本的jdk总是找半天也找不到,怎么办[通俗易懂]官网下载jdk要下载低版本的jdk总是找半天也找不到,怎么办

    2022年4月23日
    88
  • 多线程之旅(10)_QueueUserWorkItem和UnsafeQueueUserWorkItem的区别「建议收藏」

    多线程之旅(10)_QueueUserWorkItem和UnsafeQueueUserWorkItem的区别「建议收藏」这是个比较冷门的点,是我在写多线程之旅(2)_创建一个属于自己的精简线程池_线程调度策略——附C#源码这篇文章时,发现在做线程队列时,官方选用的是UnsafeQueueUserWorkItem,而不是常见的QueueUserWorkItem,所以后续我就对这两个方法调查一番,发现资料也不多,总结一下。一、官方定义首先看一下官方的定义:来源:https://docs.microsof…

    2022年9月24日
    2
  • spdlog学习笔记

    spdlog学习笔记说明:所有内容翻译自spdlog的wiki,受英语水平所限,有所错误或失真在所难免,如果您有更好的建议,请在博文下留言。线程安全spdlog::命名空间下的是线程安全的,当loggers在不同的线程同时执行时,下述函数不应该被调用:spdlog::set_error_handler(log_err_handler);//orlogger->set_error_handler(…

    2022年6月23日
    22
  • embedding实现_embedded option

    embedding实现_embedded option假设词汇量为100万个时的CBOW模型如下,输入层和输出层存在100万个神经元。下面两个问题导致耗时严重。问题一、输入层的one-hot表示和权重矩阵的乘积。one-hot表示占用内存过多,计算one-hot表示与权重矩阵的乘积,需要花费大量时间。问题二、中间层和权重矩阵的乘积以及Softmax层的计算。需要大量的计算,花费大量时间。解决问题一:计算one-hot表示矩阵和权重矩阵的乘积,其实就是将权重矩阵的某个特定的行取出来。如下图所示。Embedding层

    2025年9月26日
    6
  • Okio原理分析之简介

    Okio原理分析之简介Okio是一个实现java.io和java.nio的库,更方便访问、存储和处理数据。作为OkHttp组件的一部分,在Android中引入支持HTTP的客户端Okio一些关键概念介绍先看一下类图,对整体框架有个大概的了解ByteString和Buffer保存数据ByteString代表一个不可变的字节序列。对于char数据,String是基础类型。Buffer可变的字节序列,像ArrayList,读写Buffer的操作与queue类似,从尾部写,从头部读,不需要管理position/limi

    2022年5月12日
    50
  • 基于Amos路径分析的模型拟合参数详解[通俗易懂]

    基于Amos路径分析的模型拟合参数详解[通俗易懂]基于Amos路径分析的模型拟合参数详解1卡方、自由度、卡方自由度比2GFI、AGFI3RMR、RMSEA4CFI5NFI、TLI(NNFI)6ECVI7AIC、BIC、CAIC  前面两篇博客,分别对Amos的基本操作与模型、参数等加以详细介绍,点击下方即可进入对应文章。  博客1:基于Amos的路径分析与模型参数详解  博客2:基于Amos路径分析的输出结果参数详解  本文则将由模型拟合度指标入手,对Amos所得到的路径分析模型结果加以度量。1卡方、自由度、卡方自由度比  在模

    2022年8月24日
    25

发表回复

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

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