概念:

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

分区的原因:

           对于非常大的表在进行诸如数据库维护、备份或者还原操作的时候会消耗大量的时间;除此之外还会增加标的死锁或者并发性的问题的概率。当然我们也可以通过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 (‘时间点’) 来切换和合并分区。

   总结:

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

优化SQLServer——表和分区索引的更多相关文章

  1. 优化SQLServer——表和分区索引(二)

    简介     之前一篇简单的介绍了语法和一些基本的概念,隔了一段时间,觉得有必要细致的通过实例来总结一下这部分内容.如之前所说,分区就是讲大型的对象(表)分成更小的块来管理,基本单位是行.这也就产生了 ...

  2. MySQL单机优化---分表、分区、分库

    一.分表: 水平分表:根据条件把数据分为N个表(例如:商品表中有月份列,则可以按月份进行水平分表). 使用场景:一张表中数据太多,查询效率太慢. 当需要同时查询被水平分表的多张表时: 在两条SQL语句 ...

  3. (转)SQLSERVER表分区的介绍(一)

    下面进入正题吧,很多时候当单张数据表的数据量比较大的时候比如千万级别条记录.上亿级别记录,如果不做优化,那么查询的效率大家清楚. 有经验的人会通过各种手段做优化,其中表分区就是其中一种手段. 个人对表 ...

  4. sqlserver表分区

    参考:http://www.cnblogs.com/knowledgesea/p/3696912.html 及百度搜索sqlserver表分区 create partition function sg ...

  5. sqlserver表分区小结

    为什么要表分区?  当一个表的数据量太大的时候,我们最想做的一件事是什么?将这个表一分为二或者更多分,但是表还是这个表,只是将其内容存储分开,这样读取就快了N倍了 原理:表数据是无法放在文件中的,但是 ...

  6. 无法重新组织表 "ty_wf_ex_local_process_info" 的索引 "idx_prc_act_id" (分区 1),因为已禁用页级锁定。

    无法重新组织表 "ty_wf_ex_local_process_info" 的索引 "idx_prc_act_id" (分区 1),因为已禁用页级锁定. ALT ...

  7. SQL优化的四个方面,缓存,表结构,索引,SQL语句

    一,缓存 数据库属于 IO 密集型的应用程序,其主要职责就是数据的管理及存储工作.而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级.所 ...

  8. SQL Server查询性能优化——堆表、碎片与索引(二)

    本文是对 SQL Server查询性能优化——堆表.碎片与索引(一)的一些总结.  第一:先对 SQL Server查询性能优化——堆表.碎片与索引(一)中的例一的SET STATISTICS IO之 ...

  9. 优化的四个方面,缓存,表结构,索引,SQL语句

    一,缓存 数据库属于 IO 密集型的应用程序,其主要职责就是数据的管理及存储工作.而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级.所 ...

随机推荐

  1. 【C#进阶系列】17 委托

    委托主要是为了实 现回调函数机制,可以理解为函数指针(唯一不同的在于多了委托链这个概念). 然而用的时候可以这么理解,但是委托的内部机制是比较复杂的. 一个委托的故事 delegate void ra ...

  2. Java面试题汇总(一)

    1.谈谈你对http中post和get访问的理解. http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这样认 为: ...

  3. Vue从零开始(一)

    一.什么是Vue? Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注视图层 ...

  4. Java --HashMap源码解析

    兴趣所致研究一下HashMap的源码,写下自己的理解,基于JDK1.8. 本文大概分析HashMap的put(),get(),resize()三个方法. 首先让我们来看看put()方法. public ...

  5. 利用Redis cache优化app查询速度实践

    注意:本篇文章译自speeding up existing app with a redis cache,如需要转载请注明出处. 发现问题 在应用解决方法之前,我们需要对我们面对的问题有一个清晰的认识 ...

  6. Java 经典实例: Unicode字符和String之间的转换

    在Java诞生之际,Unicode码是一个16位的字符集,因此char值似乎顺其自然为16位宽,多年来一个char变量几乎可以表示任何Unicode字符. /** * Created by Frank ...

  7. AngularJs学习第一课 Hello World

    首先先介绍一下:AngularJS是干什么的. AngularJS是为了克服HTML在构建应用上的不足而设计的.HTML是一门很好的为静态文本展示设计的声明式语言,但要构建WEB应用的话它就显得乏力了 ...

  8. sublime安装

    1.sublime下载安装 下载地址:http://www.sublimetext.com/3 选择合适版本下载 2.自定义快捷键 Ctrl+Shift+P调出命令面板 3.自定义设置 Ctrl+Sh ...

  9. Nodejs学习笔记(四)--- 与MySQL交互(felixge/node-mysql)

    目录 简介和安装 测试MySQL 认识一下Connection Options MYSQL CURD 插入 更新 查询 删除 Nodejs 调用带out参数的存储过程,并得到out参数返回值 结束数据 ...

  10. ArcGIS Server 10.1发布数据源为ArcSDE(直连)的MXD【转】

    因为ArcSDE10.1基本默认直连,所以我们在发布直连的MXD仍然需要注意相关的事宜. 1:保证两台机器都能够访问共享存储的信息 2:确保已UNC路径保存ArcCatalog的文件夹连接,而且直连的 ...