表分区操作步骤

1、设计表进行分区的方案,水平分区、垂直分区

a、水平切割将减少表的行数,这样可以将历史数据归档,减少表大小,提高访问速度。

b、垂直切割将分为主表和从表方式,将主要的列字段存放在主表中,次要的列字段存放在从表中,减少对不必要字段的访问和存放,只在需要的时候进行联表查询

2、根据业务规则确定按照日期或其他的分区原则选择分区列

3、根据选择的分区列,确定分区数,创建对应的文件组和数据文件数

最好一个分区对应一个文件组和一个数据文件,分区数据文件最好分布在不同的磁盘上,这样有利于数据库并行操作,特别是多核cpu对I/O的访问

4、创建分区函数

参见下面说明

5、创建分区架构

参见下面说明

6、创建分区表

参见下面说明

7、创建分区索引,分区聚集唯一索引

a、分区索引可以使用不同的分区架构,但必须使用相同的分区函数,存储在不同的文件组中,但是这样讲导致索引与数据表无法对齐。

b、建议尽量使用相同的分区架构,确保索引和数据表对齐,这样特别有利于滑动窗口方式的查询操作。

c、大型的分区表要有唯一聚集索引或唯一索引

唯一索引必须包含分区列,这样才能让sqlserver只访问需要的分区

表分区与分表操作的区别

  • 在sqlserver 2005之前,只能使用分表方式进行分区操作,将大表拆分成多个小表,然后通过union 方式拼接成一个视图。这种方式将给开发人员新增工作量。当需要插入更新表记录时,需要查找记录所在的数据表。
  • 在sqlserver 2005之后,微软提供表分区操作,将大表拆分成多个实际小表,大表变成逻辑表,对开发人员而言操作逻辑表与原来大表是一样的,不受影响。

创建表分区架构

CREATE PARTITION SCHEME [Sln_Partition_Tbl_IntegeralLog]
AS PARTITION [Fn_Partition_Tbl_IntegeralLog]
TO ([文件组名1], [文件组名2], [文件组名3])
GO

修改表分区架构

删除表分区架构

IF  EXISTS
(
SELECT *
FROM sys.partition_schemes WHERE name = N'Sln_Partition_Tbl_IntegeralLog'
)
DROP PARTITION SCHEME [Sln_Partition_Tbl_IntegeralLog]
GO

创建表分区函数

CREATE PARTITION FUNCTION [Fn_Partition_Tbl_IntegeralLog](datetime)
AS RANGE LEFT
FOR VALUES (N'2010-01-01T00:00:00.000', N'2011-01-01T00:00:00.000', N'2012-01-01T00:00:00.000', N'2013-01-01T00:00:00.000', N'2014-01-01T00:00:00.000')
GO

修改表分区函数

删除表分区函数

IF  EXISTS
(
SELECT *
FROM sys.partition_functions
WHERE name = N'Fn_Partition_Tbl_IntegeralLog'
)
DROP PARTITION FUNCTION [Fn_Partition_Tbl_IntegeralLog]
GO

查询表分区数据分布情况

  select  $partition.Fn_Partition_Tbl_IntegeralLog(tC_Time) [分区编号],
count(*) [分区编号],
min(tC_Time) [起始分界],
max(tC_Time) [终止分界]
from dbo.Tbl_IntegeralLog
group by $partition.Fn_Partition_Tbl_IntegeralLog(tC_Time)

创建分区表

CREATE TABLE Tbl_IntegeralLog
(
tC_Id INT is not null,
tC_Time datetime default getdate(),
PRIMARY KEY (ID)
) ON Fn_Partition_Tbl_IntegeralLog(tC_Time)
GO

查询表记录分配到哪个分区中

SELECT *, $PARTITION.Fn_Partition_Tbl_IntegeralLog(tC_Time)
FROM Tbl_IntegeralLog

查询分区2中的记录信息

select *
from Tbl_IntegeralLog
where $PARTITION.Fn_Partition_Tbl_IntegeralLog([tC_Time])= 2

查询分区函数、分区边界值、分区架构

select * from sys.partition_functions
select * from sys.partition_range_values
select * from sys.partition_schemes

根据分区字段的值查询出分区号

 SELECT $PARTITION.Fn_Partition_Tbl_IntegeralLog('2011-01-01')

以下目录视图包含数据库、表和索引级别的分区信息,以及有关单个分区函数和分区方案的信息。

获取有关单个分区函数的信息

获取有关分区函数的单个参数的信息

获取有关分区函数边界值的信息

获取有关数据库中所有分区方案的信息

获取有关单个分区方案的信息

获取有关数据库中所有分区的信息

获取有关表或索引的分区信息

sqlserver 2008表分区操作的更多相关文章

  1. C#读取Visual FoxPro(*.dbf)数据并使用SqlBulkCopy插入到SqlServer 2008 R2数据表中

    公司数据库从32位的SqlServer 2005升级到64位的SqlServer 2008 R2后,无法再像原来通过Link Server连接VFP同步数据,因此考虑用代码程序从VFP数据库中读取所需 ...

  2. SQLServer 2008以上误操作数据库恢复方法——日志尾部备份(转)

    问题: 经常看到有人误删数据,或者误操作,特别是update和delete的时候没有加where,然后就喊爹喊娘了.人非圣贤孰能无过,做错可以理解,但不能纵容,这个以后再说,现在先来解决问题. 遇到这 ...

  3. [转]SQLServer 2008以上误操作数据库恢复方法——日志尾部备份

    原文出处:http://blog.csdn.net/dba_huangzj/article/details/8491327 问题: 经常看到有人误删数据,或者误操作,特别是update和delete的 ...

  4. sqlserver 2008 卸载时提示 “重新启动计算机”失败

    问题:sqlserver 2008 卸载时提示 “重新启动计算机”失败 解决办法: 1.打开注册表:开始->运行: regedit 2.找到HKEY_LOCAL_MACHINE\SYSTEM\C ...

  5. 数据库降级-从sqlserver 2008 降到 2005

    前天遇到一个问题,是一个数据库是Sqlserver 2008的,而平台数据库库是2005的,需要把2008的数据库附加进来,试了很多办法,现在觉得最好的办法就是导出导入办法. 第一步 新建一个Sqls ...

  6. SQLServer 2008 R2 发布订阅配置指南

    原以为配置SQLServer 2008 R2的发布订阅很简单,实际配置后才发现过程中有问题地方一直都没搞明白,最后经过几天的查找问题和实践,终于搞定了.现将过程记录如下. SQLServer 2008 ...

  7. 使用SQLServer 2008的CDC功能实现数据变更捕获

    原文:使用SQLServer 2008的CDC功能实现数据变更捕获 最近由于工作需要,研究了一下2008 CDC功能,觉得还不错,下面整理了一下研究过程,虽然比较粗略,但是基本上能用了,如果有补充请大 ...

  8. SQLServer 2008 技术内幕——T-SQL 查询 笔记

    原文:SQLServer 2008 技术内幕--T-SQL 查询 笔记 1.SQL编程有许多独特之处,如:面向集合的思维方式.查询元素的逻辑处理顺序.三值逻辑.如果不掌握这些知识就开始用SQL编程,得 ...

  9. SQLServer 2008中SQL增强之三 Merge(在一条语句中使用

    SQLServer 2008中SQL增强之三 Merge(在一条语句中使用Insert,Update,Delete)   SQL Server 2008提供了一个增强的SQL命令Merge,用法参看M ...

随机推荐

  1. Entity Framework 实践系列 —— 搞好关系 - 两情相悦(双向一对一)【转载】

    Entity Framework 实践系列 —— 搞好关系 - 两情相悦(双向一对一) 自从搞好了单向一对一关系,装满代码的心中塞进了挥之不去的情丝 —— 单相思.谁都知道音乐世界离不开情感,可谁又知 ...

  2. iOS:等待控件

    定义: @interface ViewController () { UIActivityIndicatorView *testActivityIndicator; } 实例化,开始旋转: -(voi ...

  3. Octopress 之 Mac 版环境配置

    前提条件: 1.安装了 Git2.用 rbenv 或 RVM 安装了 Ruby 1.9.3 以上版本3.安装了 ExecJS 的一种支持 JavaScript 运行环境 一.安装 Octopress ...

  4. NEURAL NETWORKS, PART 3: THE NETWORK

    NEURAL NETWORKS, PART 3: THE NETWORK We have learned about individual neurons in the previous sectio ...

  5. Delphi实现HTMLWebBrowser实现HTML界面

    HTML的界面有以下特点:图文混排,格式灵活,可以包含Flash.声音和视频等,实现图文声像的多媒体界面,而且易于建立和维护.另外,HTML的显示环境一般机器上都具备,通常不需要安装额外的软件.当然, ...

  6. Java Random随机种子

    第一种情况 Random rand = new Random(47); for(int i=0;i<10;i++) System.out.println(rand.nextInt(100)); ...

  7. 《STL源码剖析》chapter2空间配置器allocator

    为什么不说allocator是内存配置器而说是空间配置器,因为空间不一定是内存,也可以是磁盘或其他辅助介质.是的,你可以写一个allocator,直接向硬盘取空间.sgi stl提供的配置器,配置的对 ...

  8. 【HDOJ】1728 逃离迷宫

    题目大坑,注意行列顺序式反的,另外注意起点和终点相同. #include <iostream> #include <cstdio> #include <cstring&g ...

  9. C++ Prime:指针

    指针与引用的区别:1.指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内它可以先后指向几个不同的对象:其二:指针无需在定义时赋值.指针在块作用域内定义如果没有被初始化,也将拥有一个不确 ...

  10. (转载)javascript客户端生成MD5值的函数代码

    (转载)http://www.jb51.net/article/26223.htm 用js实现的客户端即可实现md5值的代码,一般情况下都是后台语言才有的,客户端也有了,方便有需要的朋友了. 测试代码 ...