随着当今数据库的容量越来越快的朝着在大型数据库或超大型数据库的发展,对于数据库中的大

型表以及具有各种访问模式的表的可伸缩性和可管理性运行环境变得尤为重要,

SQL server

SQL

server 7.0

的分区视图到

SQL server 2000

中的分区视图中到

SQL server 2005

所使用的分区表,

不断改

善大型表所面临的性能、阻塞、备份空间、时间、运营成本等。当表和索引非常大的时候,通过分区

表的实现,可以将数据分为更小,更易于管理,获得更好的可操作性能。本实验介绍基于已存在的表

来如何创建分区,管理分区。

一、实验目的:对于已经存在的表且不断增大的情况下构建分区表,管理分区表,提高其性能。

二、主要步骤:对于已经存在的表,我们可以采取以下步骤来对其创建分区表

1.

创建分区函数

2.

创建分区架构并关联到分区函数

3.

删除已经存在的聚集索引

4.

基于分区架构重建聚集索引

三、实验环境:

1. windows xp pro (

英文版

) + sp2

2. SQL server 2005 Developer + sp3

3.

实验数据库

Performance,

此数据库参照实验二:

SQL server 2005

高可用性之

----

数据库镜像中的生

成脚本生成数据库,本实验对其数据库的存放做了调整,将数据和日志文件存放在

D:\SQL_Data\Performance

目录下。

4.

对已存在要创建的分区表为:

Performance

数据库下的

Orders

.

5.

Orders

表中的

orderdate

列按年进行水平分区

四、具体试验步骤:

1.

创建分区函数

确定分区的数目及分区的列,

列的数据类型。

本例将

Orders

表的

orderdate

按年份水平分五个区,

则需要定义四个边界点值。如下,

use Performance;

go

Create partition function

Part_func_orders(datetime) as

range left

for values('20021231 23:59:59.997',

'20031231 23:59:59.997',

'20041231 23:59:59.997',

'20051231 23:59:59.997');

go

--

或者使用

range right

来创建分区函数

Create partition function

Part_func_orders(datetime) as

range right

名人堂:众名人带你感受他们的驱动人生

马云任志强李嘉诚柳传志史玉柱

for values('20030101 00:00:00.000',

'20040101 00:00:00.000',

'20050101 00:00:00.000',

'20060101 00:00:00.000');

go

/*

分区值的表示范围

(

使用

range left)

infinity < x1 <= 20021231

20030101 < x2 <= 20031231

20040101 < x3 <= 20041231

20050101 < x4 <= 20051231

20060101 < x5 <= +infinity

infinity

本应当为

20020101

20061231

,此处仅用于说明表示范围

----------------------------------------------------------

分区值的表示范围

(

使用

range right)

infinity < x1 < 20030101

20030101 <= x2 < 20040101

20040101 <= x3 < 20050101

20050101 <= x4 < 20060101

20060101 <= x5 < +infinity

通过以上分析表明当

range

中使用

left

时,分区的范围右边为小于等于

values

所指定的值,

range

中使用

right

时,分区范围左边为大于等于

values

所指定的值。

规律:在使用

LEFT

分区函数时,第一个值将作为第一个分区中的上边界。在使用

RIGHT

分区函

数时,第一个值将作为第二个分区的下边界

*/

2.

添加文件组和文件

针对所创建的分区来创建文件组和文件,

我们可以创建五个文件组,

五个不同的

ndf

文件来存放

不同年份的

orders

,可以放置于不同的磁盘来减少

I/O

的开销,也可以在一个文件组中创建多个文件

来存放不同年份的

orders,

本例创建了四个文件组,其中有一年的

orders

放置到了

Primary

组中。

alter database Performance

add filegroup [FG1];

go

alter database Performance

add filegroup [FG2];

go

alter database Performance

add filegroup [FG3];

go

alter database Performance

add filegroup [FG4];

go

alter database Performance

add file

(name = FG1_data,filename = 'D:\SQL_Data\Performance\FG1_data.ndf',size = 3MB)

to filegroup [FG1];

alter database Performance

add file

(name = FG2_data,filename = 'D:\SQL_Data\Performance\FG2_data.ndf',size = 3MB)

to filegroup [FG2];

alter database Performance

add file

(name = FG3_data,filename = 'D:\SQL_Data\Performance\FG3_data.ndf',size = 3MB)

to filegroup [FG3];

alter database Performance

add file

(name = FG4_data,filename = 'D:\SQL_Data\Performance\FG4_data.ndf',size = 3MB)

to filegroup [FG4];

go

3.

创建分区架构并关联到分区函数

Create partition scheme Part_func_orders_scheme

as partition Part_func_orders

to ([FG1],[FG2],[FG3],[FG4],[Primary]);

go

4.

重建索引

(删除聚集索引以及需要分区字段的索引后重建该类索引,

表被按分区值将分配到各文

件组)

EXEC sp_helpindex N'orders' --

查看

orders

中使用的索引

drop index idx_cl_od

on orders;

go

create clustered index idx_cl_od

on orders(orderdate)

on Part_func_orders_scheme(orderdate);

go

5.

查看分区的相关情况

--

查看分区及分区范围的情况

select * from sys.partitions where object_id = object_id('orders');

select * from sys.partition_range_values;

--

查看分区架构情况

select * from sys.partition_schemes;

--

查看某一特定分区列值属于哪个分区

select Performance.$partition.Part_func_orders('20050325') as partition_num;

--

查看某一特定分区的记录

select * from orders where Performance.$partition.Part_func_orders(orderdate) = 2

--

查看各分区所包含的记录数

select $partition.Part_func_orders(orderdate) as partition_num,

count(*) as record_num

from orders

group by $partition.Part_func_orders(orderdate)

order by $partition.Part_func_orders(orderdate);

6.

分区的管理

--

增加分区值

,

增加分区之前应先增加或设置新分区使用的文件组

alter database Performance

add filegroup [FG5];

go

alter database Performance

add file

(name = FG5_data,filename = 'D:\SQL_Data\Performance\FG5_data.ndf',size = 3MB )

to filegroup [FG5];

go

alter partition scheme Part_func_orders_scheme

next used [FG5];

go

alter partition function Part_func_orders()

split range('20061231 23:59:59.997')

go

insert into orders

select 10000001,'C0000012906',213,'I','20070101','a'

union all select 10000002,'C0000019995',213,'I','20070109','a'

union all select 10000003,'C0000019996',410,'I','20070512','a';

go

select * from orders where Performance.$partition.Part_func_orders(orderdate) = 6

--

合并分区

--

合并分区后,以下将新增的三条记录放到了第

5

个分区中

alter partition function Part_func_orders()

merge range('20061231 23:59:59.997');

go

SqlServer2005基于已有表创建分区的更多相关文章

  1. NumPy 基于已有数据创建数组

    原文:Python Numpy 教程 章节 Numpy 介绍 Numpy 安装 NumPy ndarray NumPy 数据类型 NumPy 数组创建 NumPy 基于已有数据创建数组 NumPy 基 ...

  2. oracle数据表创建分区与查询

    场景: 遇到1亿数据量的数据需要根据用户名做些数据统计分析,想直接做些聚合计算基本没可能,于是打算先根据日期按照年月创建分区,然后对各个分区分别进行统计,最后汇总结果. 有两种方法,分别是手工设置分区 ...

  3. linux下如何基于已有容器创建image并运行?

    1. 通过docker ps命令先找到容器id,示例如下,123456789012就是我们要找的 jello@~$ docker ps CONTAINER ID IMAGE COMMAND CREAT ...

  4. 分析Hive表和分区的统计信息(Statistics)

    类似于Oracle的分析表,Hive中也提供了分析表和分区的功能,通过自动和手动分析Hive表,将Hive表的一些统计信息存储到元数据中. 表和分区的统计信息主要包括:行数.文件数.原始数据大小.所占 ...

  5. 为已有表快速创建自动分区和Long类型like 的方法-Oracle 11G

    对上一篇文章进行实际的运用.在工作中遇到有一张大表(五千万条数据),在开始的时候忘记了创建自动分区,导致现在使用非常不方便,查询的速度非常的满,所以就准备重新的分区表,最原始方法是先创建新的分区表,然 ...

  6. MySQL 已有大数据量表进行分区踩坑

    一.背景mysql 表中已有 4 亿数据,为提高查询效率,需创建分区,一开始计划是创建 HASH 分区,结果报错:ERROR 1659 (HY000): Field 'partno' is of a ...

  7. SQL 已有数据的表创建标识列

    针对已有数据的表创建标识列: ,) constraint FID_1 primary key(FID)

  8. oracle创建表之前判断表是否存在,如果存在则删除已有表

    Mysql 创建表之前判断表是否存在,如果存在则删除已有表 DROP TABLE IF EXISTS sys_area; CREATE TABLE sys_area ( id int NOT NULL ...

  9. Docker 基于已有镜像的容器创建镜像

    Docker 基于已有镜像的容器创建镜像: docker:/root# docker run -it januswel/centos /bin/bash docker exec -it januswe ...

随机推荐

  1. UMDH

    1. 什么是UMDH UMDH=User Mode dump heap.把进程的堆dump下来.包括堆栈信息.UMDH是WinDbg附带的一个工具. 2. 下载安装 WinDbg.完事后在WinDbg ...

  2. CentOS下添加新硬盘

    1.查看新硬盘     #fdisk –l      新添加的硬盘的编号为/dev/sdb 2.硬盘分区     1)进入fdisk模式 #/sbin/fdisk  /dev/sdb 2)输入n进行分 ...

  3. Android Studio导入Project的方法

    Android Studio到现在已经发展到0.8+的版本了,最近也在试着使用它,原因是多方面的,一个毕竟是未来的趋势,二则是github上越来越多的大牛开源项目都是基于Android Studio的 ...

  4. python时间处理之datetime

    python时间处理之datetime 标签: pythondateimportstringc 2012-09-12 23:21 20910人阅读 评论(0) 收藏 举报  分类: Python系列( ...

  5. OpenJudge计算概论-文字排版

    /*====================================================================== 文字排版 总时间限制: 1000ms 内存限制: 65 ...

  6. Android-Adapter用法总结

    1.概念 Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带.在常见的 View(ListView,GridView)等地方都需要用到Adapter.如下图 ...

  7. react-redux知识点

    1.定义组件: 2.定义action: 3.定义Reducer:reducer1(state,action): 4.定义store:store(reducer1): 5.定义mapStateToPro ...

  8. 常见的java 错误--转

    Java常见错误列表: 找不到符号(symbol) 类X是public的,应该被声明在名为X.java的文件中 缺失类.接口或枚举类型 缺失X 缺失标识符 非法的表达式开头 类型不兼容 非法的方法声明 ...

  9. MySQL 体系结构以及各种文件类型学习汇总 (转)

    1,mysql体系结构 由数据库和数据库实例组成,是单进场多线程架构. 数据库:物理操作系统文件或者其它文件的集合,在mysql中,数据库文件可以是frm.myd.myi.ibd等结尾的文件,当使用n ...

  10. javascript 中根据sort 方法随机数组 (Math.random)

    var arr = [1,2,3,4,5,6,7,8,9,10]; function Arandom(a,b){ return (Math.random() > 0.5) ? 1 : -1;; ...