概念:

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

分区的原因:

           对于非常大的表在进行诸如数据库维护、备份或者还原操作的时候会消耗大量的时间;除此之外还会增加标的死锁或者并发性的问题的概率。当然我们也可以通过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. MySQL Workbench 修改快捷键

    在安装根目录查到\data\main_menu.xml这个文件 例如,修改执行sql语句的快捷键为F5 <value type="object" struct-name=&q ...

  2. linux_shell_4_shell特性

    去年的这个时候,我曾经写过一些关于shell特性的文章,下面是第3篇:linux_shell_3_shell变量特性. 今天我们继续来学习一些关于 Linux shell的内容. [1]shell 在 ...

  3. Thinkphp 用PHPExcel 导入Excel

    搞了个简单的Excel导入, 用的是PHPExcel(百科:用来操作Office Excel文档的一个PHP类库, 基于微软的OpenXML标准和PHP语言) 好, 不说了, 开始吧... 首先得有P ...

  4. 利用Canvas编辑图片

    使用<canvas>对象在浏览器中把一幅彩色图片变成灰度图片. grayscale.html <!DOCTYPE html> <html lang="en&qu ...

  5. node.js图片上传

    1.node-formidable 对文件上传提供帮助的组件 2.app.js var formidable = require('formidable'); var http = require( ...

  6. mvc和iis工作原理

    学习IIS & MVC的运行原理 我一直疑惑于以下问题,从客户端发出一个请求,请求到达服务器端是怎样跟iis衔接起来的,而iis又是怎样读取我发布的代码的,并返回服务器上的文件.这其中是怎样的 ...

  7. UrlRewrite(URL重写)--ASP.NET中的实现

    概述 今天看了下URL重写的实现,主要看的是MS 的URL Rewrite. URL重写的优点有:更友好的URL,支持老版本的URL URL重写的缺点有:最主要的缺点是性能低下,因为如果要支持无后缀的 ...

  8. 开发 web 桌面类程序几个必须关注的细节

    HoorayOS 写了差不多快2年了,在我的坚持下也有一部分人打算着手自己也写套类似的程序,我想我可以提供一点经验. 俗话说细节决定成败,开发2年多来,我看过大大小小类似的程序不下20个,各有优点也各 ...

  9. css样式 --- CSS hack

    前端样式,虽然不是经常需要hack,但是我们经常会遇到各浏览器表现不一致的情况.基于此,某些情况我们会极不情愿的使用这个不太友好的方式来达到大家要求的页面表现.我个人是不太推荐使用hack的,要知道一 ...

  10. 如何在SharePoint2010中创建自定义电子邮件警报处理程序

    字段,如项目名称字段中,将被截断到的电子邮件通知中的 70 个字符.要解决 70 个字符的限制,请使用"更多信息"一节中的介绍的方法. 要嵌入电子邮件通知中的其他内容. 您想要更改 ...