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

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

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

转载于:https://www.cnblogs.com/zhuawang/p/3560816.html

SqlServer2005基于已有表创建分区相关推荐

  1. docker镜像了解(建立私有仓库,基于已有镜像创建,Docker的数据管理) 基于Dockerfile创建,基于本地模板创建,端口映射,容器互联)

    文章目录 docker镜像 制作镜像的过程 基于已有镜像创建 基于本地模板创建 基于Dockerfile创建 Dockerfile操作指令 Docker的数据管理 数据卷 docker的网络通信 容器 ...

  2. hive根据已有表创建新表_Hive基础之创建表

    1.创建基础表 在这个网页里详细记录了创建表的每个语法,下面就一一来看这些创建表的语法内容: CREATE TABLE [IF NOT EXISTS] [db_name.]table_name ``[ ...

  3. Git基于已有分支创建分支

    场景: 在工作中,当有一个需求的时候,需要你基于已有进行开发,就需要你新建分支,并建立本地和远程分支的关联,看看怎么解决吧! 实现步骤 1.clone主分支代码 git clone 主分支链接 2.选 ...

  4. oracle 根据已有表创建新表

    通过已经存在的表创建新表,分为两种情况 第一种:与原来的表结构相同,但是不添加原来表中的数据 create table emp2 as select * from scott.emp where 1 ...

  5. oracle添加分区语句_Oracle表创建分区如何实现?

    1.一般分区表都会很大,所以可以先创建表空间,为了让分区表存放到单独的表空间,否则默认会存放到USERS表空间 2.创建TABLESPACE TS1: CREATE TABLESPACE TS1 DA ...

  6. mysql根据已有表创建新表_SQL根据现有表新建一张表

    SQL根据现有表新建表,新建的这张表结构要跟现有表结构相同,但不要现有表里面的数据! 执行DML语句依据数据库类型而定: SQLITE -----复制表结构及数据到新表 CREATE TABLE TA ...

  7. ssas如何创建分区_如何基于SSAS信息创建Excel报告

    ssas如何创建分区 介绍 (Introduction) In SSAS, when I offer Power BI, Reporting Services, PowerPivot or Share ...

  8. HIVE的安装配置、mysql的安装、hive创建表、创建分区、修改表等内容、hive beeline使用、HIVE的四种数据导入方式、使用Java代码执行hive的sql命令

    1.上传tar包 这里我上传的是apache-hive-1.2.1-bin.tar.gz 2.解压 mkdir -p /home/tuzq/software/hive/ tar -zxvf apach ...

  9. 基于物化视图创建分区(分区的物化视图)

    基于物化视图创建分区 物化视图是实际存在的物理表,支持触发器,因此堆表可以使用的方法,物化视图同样适用.有时候对于数据量大的物化视图而言,可以用分区的技术,减少读取数据的范围从而加速查询的速度 1:创 ...

最新文章

  1. 《互联网理财一册通》一一第12章 移动互联网“指尖上的理财”
  2. 百度云获取外链直接下载突破限速
  3. SQL基础【十九、触发器】(不建议使用触发器的原因)
  4. php curl 采集文件,curl获取远程文件内容
  5. python 合并excel 自动更新_手把手教你4种方法用Python批量实现多Excel多Sheet合并
  6. 动态规划求解疯狂的采药问题(洛谷P1616题题解,Java语言描述)
  7. 使用正则表达式小心换行和回车
  8. JSK-61 二进制加法【大数】(废除!!!)
  9. 在Java中使用Rserve调用R
  10. Java Web 学生选课管理系统
  11. Element UI 官网以及其他技术文档
  12. 电工模拟接线软件 app_电气工程师手机必备APP
  13. STM8S项目创建(STVD创建)---使用 COSMIC 创建 C 语言项目
  14. linux ftps ftp,linux ftps ftp-over-ssl 配置实验
  15. wsimport简介
  16. 多级放大电路(直接耦合、阻容耦合、变压器耦合、光电耦合)
  17. mysql 自动添加创建时间、更新时间
  18. JFinal极速开发微信公众号
  19. 如何在 Windows 右键菜单中新建自己想要的文件格式
  20. 企业级NewSQL数据库 超越MongoDB、Hbase、Cassandra

热门文章

  1. 数组重组java,重组数组数组并组合相同的术语
  2. 安卓连接java_从零学习安卓自动化(java+appium方向):手机连接Appium(二)
  3. 双向箭头轮播图html,swiper轮播图配合nextTick的使用
  4. 智慧城市java开发_智慧城市主界面开发 使用eclipse开发智慧城市APP源码 - 下载 - 搜珍网...
  5. java final 内存语义_final 域的内存语义
  6. Django ModelForms
  7. 什么才是Web前端开发的必备核心技能?
  8. 深入了解C++与C语言的区别
  9. 中兴智能视觉大数据报道:人脸识别画上浓妆也不耽误识别
  10. 随机抽取文件内容中的一行