SqlServer2005基于已有表创建分区
随着当今数据库的容量越来越快的朝着在大型数据库或超大型数据库的发展,对于数据库中的大
型表以及具有各种访问模式的表的可伸缩性和可管理性运行环境变得尤为重要,
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基于已有表创建分区相关推荐
- docker镜像了解(建立私有仓库,基于已有镜像创建,Docker的数据管理) 基于Dockerfile创建,基于本地模板创建,端口映射,容器互联)
文章目录 docker镜像 制作镜像的过程 基于已有镜像创建 基于本地模板创建 基于Dockerfile创建 Dockerfile操作指令 Docker的数据管理 数据卷 docker的网络通信 容器 ...
- hive根据已有表创建新表_Hive基础之创建表
1.创建基础表 在这个网页里详细记录了创建表的每个语法,下面就一一来看这些创建表的语法内容: CREATE TABLE [IF NOT EXISTS] [db_name.]table_name ``[ ...
- Git基于已有分支创建分支
场景: 在工作中,当有一个需求的时候,需要你基于已有进行开发,就需要你新建分支,并建立本地和远程分支的关联,看看怎么解决吧! 实现步骤 1.clone主分支代码 git clone 主分支链接 2.选 ...
- oracle 根据已有表创建新表
通过已经存在的表创建新表,分为两种情况 第一种:与原来的表结构相同,但是不添加原来表中的数据 create table emp2 as select * from scott.emp where 1 ...
- oracle添加分区语句_Oracle表创建分区如何实现?
1.一般分区表都会很大,所以可以先创建表空间,为了让分区表存放到单独的表空间,否则默认会存放到USERS表空间 2.创建TABLESPACE TS1: CREATE TABLESPACE TS1 DA ...
- mysql根据已有表创建新表_SQL根据现有表新建一张表
SQL根据现有表新建表,新建的这张表结构要跟现有表结构相同,但不要现有表里面的数据! 执行DML语句依据数据库类型而定: SQLITE -----复制表结构及数据到新表 CREATE TABLE TA ...
- ssas如何创建分区_如何基于SSAS信息创建Excel报告
ssas如何创建分区 介绍 (Introduction) In SSAS, when I offer Power BI, Reporting Services, PowerPivot or Share ...
- 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 ...
- 基于物化视图创建分区(分区的物化视图)
基于物化视图创建分区 物化视图是实际存在的物理表,支持触发器,因此堆表可以使用的方法,物化视图同样适用.有时候对于数据量大的物化视图而言,可以用分区的技术,减少读取数据的范围从而加速查询的速度 1:创 ...
最新文章
- 《互联网理财一册通》一一第12章 移动互联网“指尖上的理财”
- 百度云获取外链直接下载突破限速
- SQL基础【十九、触发器】(不建议使用触发器的原因)
- php curl 采集文件,curl获取远程文件内容
- python 合并excel 自动更新_手把手教你4种方法用Python批量实现多Excel多Sheet合并
- 动态规划求解疯狂的采药问题(洛谷P1616题题解,Java语言描述)
- 使用正则表达式小心换行和回车
- JSK-61 二进制加法【大数】(废除!!!)
- 在Java中使用Rserve调用R
- Java Web 学生选课管理系统
- Element UI 官网以及其他技术文档
- 电工模拟接线软件 app_电气工程师手机必备APP
- STM8S项目创建(STVD创建)---使用 COSMIC 创建 C 语言项目
- linux ftps ftp,linux ftps ftp-over-ssl 配置实验
- wsimport简介
- 多级放大电路(直接耦合、阻容耦合、变压器耦合、光电耦合)
- mysql 自动添加创建时间、更新时间
- JFinal极速开发微信公众号
- 如何在 Windows 右键菜单中新建自己想要的文件格式
- 企业级NewSQL数据库 超越MongoDB、Hbase、Cassandra
热门文章
- 数组重组java,重组数组数组并组合相同的术语
- 安卓连接java_从零学习安卓自动化(java+appium方向):手机连接Appium(二)
- 双向箭头轮播图html,swiper轮播图配合nextTick的使用
- 智慧城市java开发_智慧城市主界面开发 使用eclipse开发智慧城市APP源码 - 下载 - 搜珍网...
- java final 内存语义_final 域的内存语义
- Django ModelForms
- 什么才是Web前端开发的必备核心技能?
- 深入了解C++与C语言的区别
- 中兴智能视觉大数据报道:人脸识别画上浓妆也不耽误识别
- 随机抽取文件内容中的一行