SqlServer 2005 将已存在大量数据的表更改为分区表
一、分区表简介:
使用分区表的主要目的,是为了改善大型表以及具有各种访问模式的表的可伸缩性和可管理性。
分区一方面可以将数据分为更小、更易管理的部分,为提高性能起到一定的作用;另一方面,对于如果具有多个CPU的系统,分区可以对表的操作通过并行的方式进行,这对于提升性能是非常有帮助的。
二、创建步骤:
现有一张表L_TESTRESULT共有3千万条记录,本文主要的目的是对这张表按时间进行分区,以便提高对该表的操作效率。
1、 创建新文件组,最好新建一个文件组:
ALTER DATABASE listest ADD FILEGROUP [lisfq]
2、创建分区函数:
CREATE PARTITION FUNCTION MonthDateRange(datetime)
AS RANGE LEFT FOR VALUES
(
'20071231 23:59:59.997',
'20080630 23:59:59.997',
'20081231 23:59:59.997'
)
3、根据分区函数的时间分段点创建分区文件,分区文件最好与数据库文件在不同的磁盘上,提高磁盘的读写速度:
ALTER DATABASE listest
ADD FILE
(NAME = N'lis200712',FILENAME = N'f:/data/lis200712.ndf',SIZE = 5MB,MAXSIZE = UNLIMITED,FILEGROWTH = 5MB)
TO FILEGROUP [lisfq]
ALTER DATABASE listest
ADD FILE
(NAME = N'lis200806',FILENAME = N'f:/data/lis200806.ndf',SIZE = 5MB,MAXSIZE = UNLIMITED,FILEGROWTH = 5MB)
TO FILEGROUP [lisfq]
ALTER DATABASE listest
ADD FILE
(NAME = N'lis200812',FILENAME = N'f:/data/lis200812.ndf',SIZE = 5MB,MAXSIZE = UNLIMITED,FILEGROWTH = 5MB)
TO FILEGROUP [lisfq]
4、创建分区架构,将分区函数应用到该架构上:
CREATE PARTITION SCHEME MonthDateRangeScheme
AS
PARTITION MonthDateRange
ALL TO ([lisfq])
已创建的分区函数与分区架构如下图:
5、将已存在的数据表应用到该分区方案中,可以采用删除需分区字段的索引的方式进行,如本例中我用measuretime对该表进行分区:
--删除该分区字段上的索引
drop index l_testresult.IDX_L_TESTRESULT_MEASURETIME
--按分区方案创建索引
create index IDX_L_TESTRESULT_MEASURETIME
on l_testresult(measuretime)
on MonthDateRangeScheme(measuretime)
6、对于分区表中存在聚集索引,最好将其删除重建:
--重建聚聚集索引主建
ALTER TABLE l_testresult
DROP CONSTRAINT PK_L_testresult
ALTER TABLE l_testresult
ADD CONSTRAINT PK_l_testresult
PRIMARY KEY CLUSTERED(sampleno,testid,sampletype,editstatus)
三、查询分区信息:
1、查询该表是不是分区成功:
SELECT * FROM SYS.PARTITIONS WHERE OBJECT_ID = OBJECT_ID('l_testresult'),结果如下图:
2、 查询某段时间的数据位于哪个分区:
select * ,$PARTITION.MonthDateRange(measuretime) from l_testresult where measuretime>='2009-01-01',结果如下图:
SqlServer 2005 将已存在大量数据的表更改为分区表的更多相关文章
- mysql - 在已有真实数据的表的基础上加入自增主键
先删除自增长在删除主键Alter table tb change id id int(10);//删除自增长Alter table tb drop primary key;//删除主建 然后再常规添加 ...
- Sqlserver 2005 跨数据库 导入数据
--Sqlserver 2005 跨数据库 导入数据:--SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/O ...
- SQLServer 2005 数据库定阅复制实现双机热备(主要是sharepoint 内容数据库)
原文:SQLServer 2005 数据库定阅复制实现双机热备(主要是sharepoint 内容数据库) 场景 公司最近的sharepoint的数据库服务器老是出问题,并且在一旦出现问题,就导致无法正 ...
- Ubuntu系统下配置PHP支持SQLServer 2005
最近在做一个项目,该项目的数据库是微软公司的的SQLserver ,数据库安装在另一台windows服务器上,而项目却部署在ubuntu server上.那么这样就会涉及到项目在linux上如何链接S ...
- 不制作证书是否能加密SQLSERVER与客户端之间传输的数据?
不制作证书是否能加密SQLSERVER与客户端之间传输的数据? 在做实验之前请先下载network monitor抓包工具 微软官网下载:http://www.microsoft.com/en-us/ ...
- 使用SQLServer 2008的CDC功能实现数据变更捕获
原文:使用SQLServer 2008的CDC功能实现数据变更捕获 最近由于工作需要,研究了一下2008 CDC功能,觉得还不错,下面整理了一下研究过程,虽然比较粗略,但是基本上能用了,如果有补充请大 ...
- SQLServer 2005 和自增长主键identity说再见——NEWSEQUENTIALID()
``code 在SQLServer2005环境下,表的主键应该怎样设计. 目前主要用到的主键方案共三种 自动增长主键 手动增长主键 UNIQUEIDENTIFIER主键 1.先说自动增长主键,它的优点 ...
- sqlserver 事务日志已满解决方案
sqlserver 事务日志已满解决方案 可参考这篇博客: https://www.cnblogs.com/strayromeo/p/6961758.html 一.删除日志文件:(不建议) 二.手动收 ...
- SQL 已有数据的表创建标识列
针对已有数据的表创建标识列: ,) constraint FID_1 primary key(FID)
随机推荐
- OnBecameVisible和OnBecameInvisible ,OnWillRenderObject
OnBecameVisible 和 OnBecameInvisible ,OnWillRenderObject 只有在所挂物体(不包括子物体)有render才有效 //可见 private void ...
- Hibernate中得fetch
fetch ,可以设置fetch = "select" 和 fetch = "join" 用一对多来举例:fetch = "select"是 ...
- XE6入门(二)项目中的文件
XE6中项目文件为DPR,查看方法请参考一下以前写过的博文: "Delphi项目构成之项目文件DPR" 项目文件DPR 通过主菜单[Project | View Source],就 ...
- artTemplate--使用artTemplate时,由于json对象属性有特殊格式 导致调用报错artTemplate,syntax error,Template Error
我们首先看下面的代码 data = { "siteName" : "西部云谷二期17", "PM10" : "10017" ...
- tail 命令
转自:http://www.cnblogs.com/peida/archive/2012/11/07/2758084.html tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项 ...
- MyBatis对于Java对象里的枚举类型处理
平时咱们写程序实体类内或多或少都会有枚举类型属性,方便嘛.但是mybatis里怎么处理他们的增删改查呢? 要求: 插入的时候,会用枚举的定义插入数据库,我们希望在数据库中看到的是数字或者其他东西: 查 ...
- 解决IE兼容模式的方案
在html头 加标签 强制使用最新的ie渲染 <meta http-equiv="X-UA-Compatible" content="IE=edge"&g ...
- How to check WWN and Multipathing on Windows Server
There are many ways to find the World Wide Name (WWN) of fibre channel HBA connected to windows serv ...
- Netcore使用MailKit进行邮件发送
public void TestSendMailDemo() { var message = new MimeKit.MimeMessage(); message.From.Add(new MimeK ...
- JEECG中的validform验证ajaxurl的使用方法
validform验证是一种非常方便的,实用的验证方式 对于需要验证后台数据的,validform是一个非常明智的选择 validform的ajaxurl属性能够完美的实现:当输入完成某一输入框,就会 ...