创建分区表

列********************************************************************************

CREATE TABLE ccc1

( id number(8),name
varchar2(30),sales_date date)

PARTITION BY RANGE (sales_date)

(PARTITION p1 VALUES LESS THAN (
TO_DATE(‘01-JAN-1999‘,‘DD-MON-YYYY‘)) tablespace zh,

PARTITION p2 VALUES LESS THAN (
TO_DATE(‘01-JAN-2000‘,‘DD-MON-YYYY‘)) tablespace zh,

PARTITION p3 VALUES LESS THAN (
TO_DATE(‘01-JAN-2001‘,‘DD-MON-YYYY‘)) tablespace zh,

PARTITION p4 VALUES LESS THAN (
TO_DATE(‘01-JAN-2002‘,‘DD-MON-YYYY‘)) tablespace zh,

PARTITION p5 VALUES LESS THAN (MAXVALUE)
tablespace zh

);

插入数据

insert into ccc1
values(1,‘PC1‘,to_date(‘17-FEB-2000‘,‘DD-MON-YYYY‘));

insert into ccc1
values(2,‘PC2‘,to_date(‘17-FEB-2001‘,‘DD-MON-YYYY‘));

insert into ccc1
values(3,‘PC3‘,‘17-FEB-1999‘);

insert into ccc1
values(4,‘PC4‘,‘15-FEB-2000‘);

insert into ccc1
values(5,‘PC5‘,‘17-FEB-2002‘);

insert into ccc1
values(6,‘PC6‘,‘12-FEB-2001‘);

insert into ccc1
values(7,‘PC7‘,‘11-FEB-1998‘);

insert into ccc1
values(8,‘PC8‘,‘13-FEB-2002‘);

SQL> insert into
ccc1 values(8,‘PC8‘,‘13-FEB-2013‘);

创建唯一索引

CREATE unique INDEX
i_ccc1_id ON ccc1(id) GLOBAL

PARTITION BY HASH
(id)

(PARTITION pi1  TABLESPACE zh,

PARTITION pi2 
TABLESPACE zh,

PARTITION pi3 
TABLESPACE zh,

PARTITION pi4 
TABLESPACE zh) parallel 4;

创建失败有重复值
--去重查询id相同的为重复但rowid都是不同的。以此去重。

SQL> select a.*
from ccc1 a where a.rowid in(select min(b.rowid) from ccc1 b where b.id=a.id);

查询重复数据

SQL> select a.*
from ccc1 a where a.rowid not in(select min(b.rowid) from ccc1 b where
b.id=a.id);

删除重复数据

SQL> delete from
ccc1 a where a.rowid not in(select min(b.rowid) from ccc1 b where
b.id=a.id);

再创建索引 全局唯一

CREATE unique INDEX
i_ccc1_id ON ccc1(id) GLOBAL

PARTITION BY HASH
(id)

(PARTITION pi1  TABLESPACE zh,

PARTITION pi2 
TABLESPACE zh,

PARTITION pi3 
TABLESPACE zh,

PARTITION pi4 
TABLESPACE zh) parallel 4;

创建局部分区索引

SQL> create index
i_ccc1_date on ccc1(sales_date) local;

创建不分区索引

SQL> create index
i_ccc1_name on ccc1(name);

查询索引信息

SQL> select
index_name,index_type,table_name,tablespace_name,partitioned from dba_indexes
where table_name =‘CCC1‘;

添加分区

SQL> alter table
ccc1 add partition p6 values less than (to_date(‘2019-01-01‘,‘yyyy-mm-dd‘))
tablespace zh;

alter
table ccc1 add partition p6values less than (to_date(‘2019-01-01‘,‘yyyy-mm-dd‘)) tablespace zh

*

ERROR at line 1:

ORA-14074: partition
bound must collate higher than that of the last partition

报错因为前面用过PARTITION p5 VALUES LESS THAN (MAXVALUE)所以有俩种办法解决

第一删除p5重新添加

Alter
table ccc1 droppartition p5;

第二拆分分区 :split  合并分区gerge

查询分区表

SQL> SELECT
TABLESPACE_NAME,TABLE_NAME, PARTITION_NAME

FROM
DBA_TAB_PARTITIONS WHERE TABLE_NAME=‘CCC1‘

ORDER BY
TABLESPACE_NAME;

创建分区表,布布扣,bubuko.com

时间: 2024-10-05 04:43:49

创建分区表的相关文章

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

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

创建分区表过程

创建流程: 创建代码: 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

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

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

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

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

创建分区表(按照年份分区,自动新增分区)

创建分区表AAA,通过字段创建时间的年份来分区,分区表自动根据插入的数据新增对应的分区,不过此处自动创建的分区名称为系统创建的,如:SYS_24. CREATE TABLE AAA ( ID NUMBER(8), CREATETIME DATE, VALUE NUMBER(8) ) PARTITION BY RANGE(CREATETIME) INTERVAL(NUMTOYMINTERVAL(1,'YEAR')) ( PARTITION P2014 VALUES LESS THAN(TO_DAT

创建分区表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_i

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来达到此目的,但同时这些数据就永远不可用了. 因此,需要一个高效的把历史数据从当前查询中隐藏