创建分区表2:对已经存在的表进行分区

Sql Server 支持对一个已经存在的表进行分区。

-- create parition function
CREATE PARTITION FUNCTION pf_int_Left (int)
AS
RANGE LEFT
FOR VALUES (10,20);

--determine partition number
select $Partition.pf_int_left(21)

CREATE PARTITION SCHEME PS_int_Left
AS
PARTITION pf_int_Left
TO ([primary], [primary], [primary]);

一,如果表有聚集索引,并且聚集索引列就是分区列,那么重建聚集索引使表分区。聚集索引的创建有两种方式,一是使用primary key clustered 约束创建,一是使用 create clustered index 创建。

1,如果聚集索引是使用 create clustered index 创建的,并且聚集索引列就是分区列,那么删除所有的 nonclustered index,重建clustered index使表分区。

If the table is clustered on the partition column, you can drop all the indexes except the clustered index, and rebuild the clustered index on the partition scheme, as in the following example.

如果对以下表,聚集索引是使用 create clustered index 创建的,

create table dbo.dt_partition
(
ID int,
Code int
)

create clustered index cix_dt_partition_ID
on dbo.dt_partition(ID)

分区只有一个

select *
from sys.partitions p
where p.object_id=object_id(N‘dbo.dt_partition‘,N‘U‘)

重建表的聚集索引,并使用partition scheme

create clustered index cix_dt_partition_ID
on dbo.dt_partition(ID)
with(drop_existing=on)
on PS_int_Left(ID)

重建聚集索引之后,表的分区有三个

select *
from sys.partitions p
where p.object_id=object_id(N‘dbo.dt_partition‘,N‘U‘)

2,如果表的聚集索引是使用Primary key clustered 来创建,并且primary key 就是分区列,使用 alter table drop constraint 命令使表分区

ALTER TABLE schema_name . table_name
DROP [ CONSTRAINT ]
{  constraint_name
 [ WITH ( <drop_clustered_constraint_option> [ ,...n ] )]
} [ ,...n ]

WITH <drop_clustered_constraint_option>  

Specifies that one or more drop clustered constraint options are set.

MAXDOP = max_degree_of_parallelism <as applies to drop_clustered_constraint_option>

Overrides the max degree of parallelism configuration option only for the duration of the operation.Use the MAXDOP option to limit the number of processors used in parallel plan execution. The maximum is 64 processors.

ONLINE = { ON | OFF } <as applies to drop_clustered_constraint_option>
Specifies whether underlying tables and associated indexes are available for queries and data modification during the index operation. The default is OFF. REBUILD can be performed as an ONLINE operation.

MOVE TO { partition_scheme_name(column_name [ 1, ... n] ) | filegroup | [default] } <as applies to drop_clustered_constraint_option>

Specifies a location to move the data rows currently in the leaf level of the clustered index. The table is moved to the new location. This option applies only to constraints that create a clustered index.

In this context, default is not a keyword. It is an identifier for the default filegroup and must be delimited, as in MOVE TO [default].

关键option是move to,将聚集索引的叶子节点移动到new location,如果new location 是partition scheme界定的分区,那么可以在删除 pk clustered的同时,将表数据分区,这种操作类似使用 create table on partition scheme创建分区表。

2.1 创建示例表

create table dbo.dt_partition_pk
(
ID int not null constraint pk__dt_partition_ID primary key clustered ,
Code int
)

查看表的分区,只有一个

select *
from sys.partitions p
where p.object_id=object_id(N‘dbo.dt_partition_pk‘,N‘U‘)

2.2 删除 PK clustered 约束,并将聚集索引的叶子节点的数据移动到 new location(partition scheme)。

alter table dbo.dt_partition_pk
drop constraint pk__dt_partition_ID
with( move to PS_int_Left(ID))

删除 PK clustered 约束之后,表没有PK,没有index,是个分区的heap。

查看分区

select *
from sys.partitions p
where p.object_id=object_id(N‘dbo.dt_partition_pk‘,N‘U‘)

二,如果已经存在的表是heap,使堆表分区非常简单,只需要建立一个分区的clustered index。

1,示例数据表

create table dbo.dt_partition_heap
(
ID int not null,
Code int
)

查看表分区

select *
from sys.partitions p
where p.object_id=object_id(N‘dbo.dt_partition_heap‘,N‘U‘)

2,创建聚集并在on子句中应用 partition scheme。

create clustered index cix_partition_heap_ID
on dbo.dt_partition_heap(ID)
on PS_int_Left(ID)

查看分区

select *
from sys.partitions p
where p.object_id=object_id(N‘dbo.dt_partition_heap‘,N‘U‘)

时间: 2024-10-10 05:22:47

创建分区表2:对已经存在的表进行分区的相关文章

SQL Server 2005中的分区表(一):什么是分区表?为什么要用分区表?如何创建分区表?(转)

如果你的数据库中某一个表中的数据满足以下几个条件,那么你就要考虑创建分区表了. 1.数据库中某个表中的数据很多.很多是什么概念?一万条?两万条?还是十万条.一百万条?这个,我觉得是仁者见仁.智者见智的问题.当然数据表中的数据多到查询时明显感觉到数据很慢了,那么,你就可以考虑使用分区表了.如果非要我说一个数值的话,我认为是100万条. 2.但是,数据多了并不是创建分区表的惟一条件,哪怕你有一千万条记录,但是这一千万条记录都是常用的记录,那么最好也不要使用分区表,说不定会得不偿失.只有你的数据是分段

SQL Server 2008如何创建分区表,并压缩数据库空间

1.什么是分区表 分区表在逻辑上是一个表,而物理上是多个表.从用户角度来看,分区表和普通表是一样的.使用分区表的主要目的是为改善大型表以及具有多个访问模式的表的可伸缩性和可管理性.分区表是把数据按设定的标准划分成区域存储在不同的文件组中,使用分区可以快速而有效管理和访问数据子集. 适合做分区表的情况 ? 数据库中某个表的数据很多,在查询数据时会明显感觉到速度很慢,这个时候需要考虑分区表: ? 数据是分段的,如以年份为分隔的数据,对于当年的数据经常进行增删改查操作,而对于往年的数据几乎不做操作或只

Mysql分区技术 --创建分区表

分区的作用:数据库性能的提升和简化数据管理 在扫描操作中,mysql优化器只扫描保护数据的那个分区以减少扫描范围获得性能的提高.分区技术使得数据管理变得简单,删除某个分区不会对另外的分区造成影响,分区有系统直接管理不用手工干预. 查询当前的mysql数据库版本是否支持分区show variables like '%partition%'; 分区类型[RANGE 分区]:基于属于一个给定连续区间的列值,把多行分配给分区. [LIST 分区]:类似于按RANGE分区,区别在于LIST分区是基于列值匹

oracle按时间创建分区表

首先明确分区表和表分区的区别:表分区是一种思想,分区表示一种技术实现.当表的大小过G的时候可以考虑进行表分区,提高查询效率,均衡IO.oracle分区表是oracle数据库提供的一种表分区的实现形式.表进行分区后,逻辑上仍然是一张表,原来的查询SQL同样生效,同时可以采用使用分区查询来优化SQL查询效率,不至于每次都扫描整个表 一.分区表基本操作 1.按时间分区表创建: create table t_test ( pk_id number(30) not null, add_date_time

SQL SERVER 性能优化四: 创建分区表

在创建分区表前,数据库中应存在不同的文件组: 假设数据库名为DF17DataPro,创建用户表UserID,将前50万数据放在主文件组,将50~100,放在fg1文件组,100以上放在fg2文件组 1.添加文件组fg1,fg2 ALTER DATABASE DF17DataPro ADD FILEGROUP fg1 ALTER DATABASE DF17DataPro ADD FILEGROUP fg2 2.为文件组添加文件 ALTER TABLE DF17DataPro ADD FILE (N

创建分区表和查看分区表的Metadata

未分区的表,只能存储在一个FileGroup中:对table进行分区后,每一个分区都存储在一个FileGroup中.表分区是将逻辑上一个完整的表,按照特定的字段拆分成Partition set,分散到(相同或不同的)FileGroup中,每一个Partition在FileGroup中都独立存储,每一个parititon都属于唯一的表对象,每一个Partition 都有唯一的ID. 在创建表时,使用On 子句指定table存储的逻辑位置: On  filegroup | "default"

PostgreSQL 创建分区表(转 仅供自己参考)

典型使用场景 随着使用时间的增加,数据库中的数据量也不断增加,因此数据库查询越来越慢. 加速数据库的方法很多,如添加特定的索引,将日志目录换到单独的磁盘分区,调整数据库引擎的参数等.这些方法都能将数据库的查询性能提高到一定程度. 对于许多应用数据库来说,许多数据是历史数据并且随着时间的推移它们的重要性逐渐降低.如果能找到一个办法将这些可能不太重要的数据隐藏,数据库查询速度将会大幅提高.可以通过DELETE来达到此目的,但同时这些数据就永远不可用了. 因此,需要一个高效的把历史数据从当前查询中隐藏

创建分区表过程

创建流程: 创建代码: 1 --创建Partition Function并制定分区规则样例 2 Create Partition Function PF_OnCreateDate(datetime) 3 As Range Right For Values('20141001','20141101','20141201','20150101','20150201'); 4 5 --基于Partition Function创建Partition Schemen并指定分区文件组存放位置 6 Creat

Mysql基础知识:创建、查看、修改和删除表

Mysql 创建.查看.修改和删除表 1. 创建表 创建表的语法形式: CREATE TABLE 表名 ( 属性名 数据类型 约束条件, 属性名 数据类型 约束条件, . . . ) ENGINE=存储引擎名 DEFAULT CHARSET=字符编码名; 约束条件表: 注意: 1)可以添加多个主键.形式: 在表名后的括号内添加:PRIMARY KEY(字段名1, 字段名2, ...): 2)存储引擎和字符编码可以省略不写: 3)设置表的字段名为默认值时,需要在 “DEFULT” 关键字后添加 “