SQL SERVER 分区
“索引要与其基表对齐,并不需要与基表参与相同的命名分区函数。但是,索引和基表的分区函数在实质上必须相同,即:
1) 分区函数的参数具有相同的数据类型;
2) 分区函数定义了相同数目的分区;
3) 分区函数为分区定义了相同的边界值。”
“先设计一个已分区表,然后为该表创建索引。执行此操作时,SQL Server 将使用与该表相同的分区方案和分区依据列自动对索引进行分区。因此,索引的分区方式实质上与表的分区方式相同。这将使索引与表“对齐”。
如果在创建时指定了不同的分区方案或单独的文件组来存储索引,则 SQL Server 不会将索引与表对齐。“
数据库结构和索引的是否合理在很大程度上影响了数据库的性能,但是随着数据库信息负载的增大,对数据库的性能也发生了很大的影响。可能我们的数据库在一开始有着很高的性能,但是随着数据存储量的急速增长—例如订单数据—数据的性能也受到了极大的影响,一个很明显的结果就是查询的反应会非常慢。在这个时候,除了你可以优化索引及查询外,你还可以做什么?建立分区表(Table Partition)可以在某些场合下提高数据库的性能,在SQL Server 2005中也可以通过SQL语句来创建表分区,但在SQL Server 2008中提供了向导形式来创建分区表。本文介绍了如何来创建分区表。
什么是分区表?
分区表是把数据按某种标准划分成区域存储在不同的文件组中,使用分区可以快速而有效地管理和访问数据子集,从而使大型表或索引更易于管理。合理的使用分区会很大程度上提高数据库的性能。已分区表和已分区索引的数据划分为分布于一个数据库中多个文件组的单元。数据是按水平方式分区的,因此多组行映射到单个的分区。已分区表和已分区索引支持与设计和查询标准表和索引相关的所有属性和功能,包括约束、默认值、标识和时间戳值以及触发器。因为分区表的本质是把符合不同标准的数据子集存储在一个数据库的一个或多个文件组中,通过元数据来表述数据存储逻辑地址。
决定是否实现分区主要取决于表当前的大小或将来的大小、如何使用表以及对表执行用户查询和维护操作的完善程度。通常,如果某个大型表同时满足下列两个条件,则可能适于进行分区:
- 该表包含(或将包含)以多种不同方式使用的大量数据。
- 不能按预期对表执行查询或更新,或维护开销超过了预定义的维护期。
例如,如果对当前月份的数据主要执行 INSERT、UPDATE、DELETE 和 MERGE 操作,而对以前月份的数据主要执行 SELECT 查询,则按月份对表进行分区可能会使表的管理工作更容易一些。如果对表的常规维护操作只针对一个数据子集,那么此优点尤为明显。如果该表没有分区,那么就需要对整个数据集执行这些操作,这样就会消耗大量资源。例如,通过分区,可以针对具有只写数据的单个月份执行类似索引重新生成和碎片整理的维护操作,而只读数据仍可用于联机访问。
Transact-SQL ALTER TABLE...SWITCH 语句还可以快速有效地移动数据子集。这也提供了很好的便利,让我们可以放心的对数据表进行全面的维护。
怎么建立分区表?
创建分区表分为以下几个步骤:
- 创建分区函数以指定如何分区使用该函数的表。(T-SQL: CREATE PARTITION FUNCTION)
- 创建分区方案以指定分区函数的分区在文件组上的位置。(T-SQL: CREATE PARTITION SCHEMA)
- 创建使用分区方案的表。
以下步骤演示了如何在SQL Server 2008 Management Studio中通过向导完成创建分区表的过程。当然,你也可以通过脚本来完成这些功能。
- 在SQL Server 2008 Management Studio中选择你想要创建分区表的对象,右键点击表名选择Storage –> Create Partition.
- 在出现的Create Partition Wizard中点击Next按钮进入Select a Partition Column页面。
- 在Select a Partition Column页面设置基于哪个字段进行数据子集划分。在这里我们选择EndDate。在后边会对EndDate设置条件来划分数据子集。
- 在Select a Partition Function页面输入一个名字来作为Function的名称。这里我们输入YearOrderPartitionFunction
- 下一步是给创建的分区方案命名。在Select a Partition Schema页面输入YearOrderPartition作为名称。
- 在Map Partition页面上我们设置分区标准。Left Boundary和Right Boundary是指符合区分标准的数据被放置到那个数据子集,对应<=和<.
- 点击Set Boundaries来设置基于EndDate的数据子集划分标准。
- 点击Estimate storage来估算每个数据子集的空间大小和其数据条目。根据设定的从2001-01-01到2004-12-31为止的所有数据按年划分的标准,我们最终得到了5个数据子集和一个用来存放最新数据的子集。这个新的数据子集对任何分区都是必须的,每个分区表中都会含有这个新的数据子集用来存放不同于数据标准划分的所有子集的数据(在这里就是大于2005年1月1日的订单)。
- 接下来通过选择以哪种方式运行(Run Immediately或者Schedule或者Script)来结束向导。分区表创建完成。
创建表分区完成了,接下来你可以享受表分区带给我们的优越性了(如果你的选择是正确的话),你还可以针对各个数据子集来进行合并、删除、移动等。通过这些你可以很好的维护数据库。在以后的post中我们会接下来介绍如何使用分区表。
SQL SERVER 分区的更多相关文章
- (一)SQL Server分区详解Partition(目录)
一.SQL Server分区介绍 在SQL Server中,数据库的所有表和索引都视为已分区表和索引,默认这些表和索引值包含一个分区:也就是说表或索引至少包含一个分区.SQL Server中数据是按水 ...
- Sql Server 分区演练 【转】
Sql Server 分区演练 [转] 代码加注释,希望对初学者有用. USE [master]GOif exists (select * from sys.databases where name ...
- (二)SQL Server分区创建过程
虽然分区有很多好处(一)SQL Server分区详解Partition,却不能随意使用:且不说分区管理的繁琐,只是跨分区带来的负面影响就需要我们好好分析是否有必要使用分区.一般分区创建的业务特点:用于 ...
- SQL SERVER分区视图
借助SQL SERVER分区视图,可以对SQL中的表进行集中管理,下文将以实例的方式为您详解SQL SERVER分区视图,希望对您学习SQL数据库能有所帮助. SQL SERVER分区视图给我们提供了 ...
- sql server 分区(上)
分区发展历程 基于表的分区功能为简化分区表的创建和维护过程提供了灵活性和更好的性能.追溯到逻辑分区表和手动分区表的功能. 二.为什么要进行分区 为了改善大型表以及具有各种访问模式的表的可伸缩 ...
- SQL SERVER分区详解(1-5)
转自: (五)SQL Server分区自动化案例 (四)SQL Server分区管理 (三)索引分区知识详解 (二)SQL Server分区创建过程 (一)SQL Se ...
- SQL Server分区键列必须是主键一部分
SQL Server分区键列必须是主键一部分. 必须把分区列包含在主键/唯一约束/唯一索引的键列中. USE tempdb GO -- 测试表 CREATE TABLE dbo.tb( id int, ...
- 转载 :sql server分区 http://blog.itpub.net/27099995/viewspace-1081158/
转载:http://blog.itpub.net/27099995/viewspace-1081158/ 在 sql server 2005 之前不提供分区表,但可以用其他方式建立“分区表”,sql ...
- (四)SQL Server分区管理
一.拆分分区(SPLIT) 在已有分区上添加一个新分区. 如下图所示,将分区03拆分成03和04分区,拆分方式先锁定旧03分区的所有数据,后将旧03分区相关数据迁移到分区04,最后删除旧03上的对应分 ...
随机推荐
- final阶段团队贡献分分配
小组名称:nice! 小组成员:李权 于淼 刘芳芳 韩媛媛 宫丽君 项目内容:约跑app 代码git的地址:https://git.coding.net/muziliquan/niceGroup.gi ...
- node 异步编程
node 异步编程 我了解到的node异步编程可分成: 1.回调函数 2.pub/sub模式(发布/订阅模式) 3.promise 4.generator 5.async await 一.直接回调函数 ...
- 苹果版App开发心得
这几个月中做的工作包括网站开发.安卓App开发和苹果App开发,前两者用的语言都是我熟悉的java,故苹果知识的学习,较安卓知识的学习,多出「语言基础」一块,其他方面差不多. 之前发过安卓那篇,如感兴 ...
- IIS Express 配置外部访问
IIS Express是Visual Stuido自带的微型Web服务器,简单易用. IIS Express默认只允许本机访问,通过Visual Studio调试Web程序时,我们有时需要通过外部访问 ...
- dev TreeList拖拽
一.说明 使用dev控件,TreeList1向TreeList2拖拽 二.属性 //允许拖拽 treeList1.AllowDrop = true; tre ...
- chrome + vi
vimer们福利,一款能在chrome上面使用vim快捷键的插件 http://myhozz.com/2014/10/25/use-vim-in-chrome/
- 设置myeclipse新建jsp文件默认编码为UTF-8
有三个地方需要改编码设置: 1. window-->preference-->general-->contenttype 然后在content types中展开每一个子项,并在Def ...
- Code4App地址
http://www.code4app.com/ 一个 ios 很多sample的网站
- 课堂 一些代码的叫法 JavaScript js
():圆括号 {} :花括号 <>:尖括号 [] :方括号
- js 倒计时(可自定义时间)
<html> <head> <title>js 倒计时</title> </head> <body> <div> & ...