对已有表进行分区

目标数据库:BOEE

分区表:CB_PRODUCT

分区字段:ID

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

  1.添加文件组

  2.设置默认的文件组

3.创建分区函数
     4.创建分区架构并关联到分区函数
     5.删除已经存在的聚集索引(我这里是主键,取消主键约束即删除了索引)
     6.基于分区架构重建聚集索引

--修改数据库,创建文件组
ALTER DATABASE BOEE
ADD FILEGROUP FG10000
GO
ALTER DATABASE BOEE
ADD FILEGROUP FG20000
GO
ALTER DATABASE BOEE
ADD FILEGROUP FG30000
GO

--添加次要数据文件
ALTER DATABASE BOEE
ADD FILE
(
	NAME=PRODUCT10000,
	FILENAME=N‘D:\DATA\PRODUCT10000.ndf‘,
	SIZE=5,
	MAXSIZE=500,
	FILEGROWTH=1
),
(
	NAME=PRODUCT20000,
	FILENAME=N‘D:\DATA\PRODUCT20000.ndf‘,
	SIZE=5,
	MAXSIZE=500,
	FILEGROWTH=1
),
(
	NAME=PRODUCT30000,
	FILENAME=N‘D:\DATA\PRODUCT30000.ndf‘,
	SIZE=5,
	MAXSIZE=500,
	FILEGROWTH=1
)
TO FILEGROUP FG10000
GO

--添加次要数据文件
ALTER DATABASE BOEE
ADD FILE
(
	NAME=PRODUCT60000,
	FILENAME=N‘E:\DATA\PRODUCT60000.ndf‘,
	SIZE=5,
	MAXSIZE=500,
	FILEGROWTH=1
),
(
	NAME=PRODUCT40000,
	FILENAME=N‘E:\DATA\PRODUCT40000.ndf‘,
	SIZE=5,
	MAXSIZE=500,
	FILEGROWTH=1
),
(
	NAME=PRODUCT50000,
	FILENAME=N‘E:\DATA\PRODUCT50000.ndf‘,
	SIZE=5,
	MAXSIZE=500,
	FILEGROWTH=1
)TO FILEGROUP FG20000
GO

--添加次要数据文件
ALTER DATABASE BOEE
ADD FILE
(
	NAME=PRODUCT70000,
	FILENAME=N‘G:\DATA\PRODUCT70000.ndf‘,
	SIZE=5,
	MAXSIZE=500,
	FILEGROWTH=1
),
(
	NAME=PRODUCT80000,
	FILENAME=N‘G:\DATA\PRODUCT80000.ndf‘,
	SIZE=5,
	MAXSIZE=500,
	FILEGROWTH=1
),
(
	NAME=PRODUCT90000,
	FILENAME=N‘E:\DATA\PRODUCT90000.ndf‘,
	SIZE=5,
	MAXSIZE=500,
	FILEGROWTH=1
)TO FILEGROUP FG30000
GO

--设置默认的文件组
ALTER DATABASE BOEE
MODIFY FILEGROUP FG10000  DEFAULT
GO
--创建分区函数
CREATE PARTITION FUNCTION PRODUCT_FUC(INT) AS RANGE LEFT FOR VALUES(10000,20000)
GO
--创建分区方案
CREATE PARTITION SCHEME PRODUCT_SCHEME
AS PARTITION PRODUCT_FUC TO(FG10000,FG20000,FG30000)
GO

--查看cb_product 索引情况
exec sp_helpindex N‘cb_product‘

GO
--解除主键约束
alter table cb_product
drop constraint PK_cb_product
GO
---重建索引(删除聚集索引以及需要分区字段的索引后重建该类索引,表被按分区值将分配到各文件组)
CREATE CLUSTERED INDEX IDX_PRODUCT_ID ON CB_PRODUCT(ID) ON PRODUCT_SCHEME(ID)
GO
--
ALTER TABLE CB_PRODUCT
ADD CONSTRAINT PK_PRODUCT_ID PRIMARY KEY(ID)
GO

SELECT * FROM SYS.PARTITIONS

GO
select $partition.PRODUCT_FUC(ID) as partition_num,count(*) as record_num
from CB_PRODUCT
group by $partition.PRODUCT_FUC(ID)
order by $partition.PRODUCT_FUC(ID)

  本文章仅供参考,没有过多的解释

对已有表进行分区

时间: 2024-10-25 21:30:37

对已有表进行分区的相关文章

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

类似于Oracle的分析表,Hive中也提供了分析表和分区的功能,通过自动和手动分析Hive表,将Hive表的一些统计信息存储到元数据中. 表和分区的统计信息主要包括:行数.文件数.原始数据大小.所占存储大小.最后一次操作时间等: 新表的统计信息 对于一个新创建的表,默认情况下,如果通过INSERT OVERWRITE的方式插入数据,那么Hive会自动将该表或分区的统计信息更新到元数据. 有一个参数来控制是否自动统计,hive.stats.autogather,默认为true. 举例来说: 先创

对已存在的表进行分区时遇到的坑

在网上能够找到很多关于表分区的资料,可是大部分都是在介绍如何给一个新表创建表分区,而对已存在的表如何做分区的文章相对比较少,因此一些坑没有被"挖掘"出来或者"曝光率"比较低. 笔者最近遇到了一个这样的案例,刚好踩到了两个坑,现分享给大家. 对已存在的表进行分区最常见的方法就是重建聚集索引或者创建聚集索引(如果表上没有).因为聚集索引的页级就是实际数据,而重建或者创建聚集索引时会重新组织页,所以如果在重建或者创建索引时指定分区架构,那么该表上所有的数据就会按照分区架构

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

一.背景mysql 表中已有 4 亿数据,为提高查询效率,需创建分区,一开始计划是创建 HASH 分区,结果报错:ERROR 1659 (HY000): Field 'partno' is of a not allowed type for this type of partitioning1 查询得知报错原因,HASH 分区只支持数字分区,而我要分区的字段是 varchar 类型,故改用 KEY 分区二.解决 KEY 分区语句: alter table TABLENAME PARTITION

Oracle本地网络分表模拟分区裁剪

来自讨论贴 http://www.itpub.net/thread-1877111-1-1.html 准备数据表 2014-07-20 01:38:10>create table tb_1 as select * from dba_objects where rownum<100; 表已创建. 2014-07-20 01:38:19>create table tb_2 as select * from dba_objects where rownum<100; 表已创建. 2014

mysql数据库为什么要分表和分区?

一般下载的源码都带了MySQL数据库的,做个真正意义上的网站没数据库肯定不行. 数据库主要存放用户信息(注册用户名密码,分组,等级等),配置信息(管理权限配置,模板配置等),内容链接(html ,图片,声音,视频等等的路径).那mysql数据库为什么要分表和分区? 为什么要分表和分区? 我们的数据库数据越来越大,随之而来的是单个表中数据太多.以至于查询书读变慢,而且 由于表的锁机制导致应用操作也搜到严重影响,出现了数据库性能瓶颈. mysql 中有一种机制是表锁定和行锁定,是为了保证数据的完整性

视图的创建(根据已有的表)

Create View V_CouponTypeasSELECT CouponTypeId, CouponTypeNameFROM Gas_CN_Trade_B2C.dbo.CouponTypeWHERE (IsDeleted = 0) 视图的创建(根据已有的表),布布扣,bubuko.com

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

Mysql 创建表之前判断表是否存在,如果存在则删除已有表 DROP TABLE IF EXISTS sys_area; CREATE TABLE sys_area ( id varchar(64) NOT NULL COMMENT '编号', parent_id varchar(64) NOT NULL COMMENT '父级编号', parent_ids varchar(2000) NOT NULL COMMENT '所有父级编号', name varchar(100) NOT NULL C

优化SQLServer&mdash;&mdash;表和分区索引(二)

简介     之前一篇简单的介绍了语法和一些基本的概念,隔了一段时间,觉得有必要细致的通过实例来总结一下这部分内容.如之前所说,分区就是讲大型的对象(表)分成更小的块来管理,基本单位是行.这也就产生了很大优势, 比如在数据库维护备份还原操作的时候,比如在大量用户访问能导致死锁的时候等等. 接下来我们通过大量实例从分区到展示分区的效果以及一些实际案例来提高对这部分知识的理解. --****************** --1.创建分区函数 --****************** --Create

Sql Server 在已知表中插入、删除、修改某一列操作

--1.向已有表中增加一列 ALTER TABLE TableName ADD ColumnName VARCHAR(20) NULL --2.删除表中的某一列 ALTER TABLE TableName DROP COLUMN ColumnName --3.修改某一列的数据类型 ALTER TABLE TableName ALTER COLUMN ColumnName INT 2.查询当年或者当月的数据 1.查询当年的数据 SELECT * FROM UserInfo WHERE YEAR(R