Oracle数据所属表分区,oracle数据库表分区

最近偶然有听到数据库表分区的概念,一时兴趣来潮,就想去稍微了解下。对于我们一些项目,可能我们需要接入一些数据,时间越长,数据量就越多,数据库表访问就越慢。这时候适量的分区有助于提高数据库表的访问速度。

一、 首先说说比较常用的集中分区方法

范围分区–>时间分区

CREATE TABLE data_fenqu2

(

ORDER_ID NUMBER(7) NOT NULL,

ORDER_DATE DATE

)

PARTITION BY RANGE (ORDER_DATE)

(

PARTITION DATA_PART1 VALUES LESS THAN (TO_DATE('2020-05-24','YYYY-MM-DD')) ,

PARTITION DATA_PART2 VALUES LESS THAN (TO_DATE('2020-05-25','YYYY-MM-DD')),

PARTITION DATA_PART3 VALUES LESS THAN (TO_DATE('2020-05-26','YYYY-MM-DD')),

PARTITION DATA_PART4 VALUES LESS THAN (MAXVALUE)

)

时间<2020-05-24的数据会自动放入DATA_PART1 区,2020-05-24<=时间<2020-05-25会放入DATA_PART2 区,下面同理。如果没有设置MAXVALUE,则当数据的时间大等于2020-05-26时。会提示插入数据失败,因为该数据无法匹配任何分区。

范围分区–>主键大小分区

CREATE TABLE data_fenqu1

(

DATA_ID NUMBER NOT NULL PRIMARY KEY,

STATUS CHAR(1)

)

PARTITION BY RANGE (DATA_ID)

(

PARTITION CUS_PART1 VALUES LESS THAN (2),

PARTITION CUS_PART2 VALUES LESS THAN (4),

PARTITION CUS_PART3 VALUES LESS THAN (10),

PARTITION CUS_PART4 VALUES LESS THAN (MAXVALUE)

)

列表分区–>字段参数分区

CREATE TABLE data_fenqu3

(

DATA_ID NUMBER NOT NULL PRIMARY KEY,

STATUS VARCHAR2(20)

)

PARTITION BY LIST (STATUS)

(

PARTITION STATUS1 VALUES ('1') ,

PARTITION STATUS2 VALUES ('2') ,

PARTITION STATUS3 VALUES ('3',‘4’) ,

);

二、分区维护操作

--显示当前用户可访问的所有分区表信息:

select * from ALL_PART_TABLES

--显示当前用户所有分区表的信息

select * from USER_PART_TABLES

--显示当前用户创建的分区表

select * from user_tables a where a.partitioned='YES'

--查看分区表的分区的情况

select * from user_tab_partitions where table_name ='DATA_FENQU2';

--添加分区

alter table data_fenqu2 add partition DATA_PART21 values less than(TO_DATE('2020-05-27','YYYY-MM-DD'));

--删除分区(注意:如果删除的分区是表中唯一的分区,那么此分区将不能被删除,要想删除此分区,必须删除表。)

alter table data_fenqu2 drop partition DATA_PART21;

--合并分区,只能向高的合并

ALTER TABLE data_fenqu2 MERGE PARTITIONS DATA_PART1,DATA_PART2 INTO PARTITION DATA_PART2;

--拆除分区

ALTER TABLE data_fenqu2 SPLIT PARTITION DATA_PART2 AT(TO_DATE('2020-05-21','YYYY-MM-DD')) INTO (PARTITION DATA_PART21,PARTITION DATA_PART22);

--对分区重命名

ALTER TABLE data_fenqu2 RENAME PARTITION DATA_PART21 TO DATA_PART22;

--查看分区的数据

select * from data_fenqu2 PARTITION(DATA_PART21) t where t.order_id=1;

--删除分区的数据

alter table data_fenqu2 truncate partition DATA_PART21;

--跨分区查询

select * from

(select * from data_fenqu2 PARTITION (DATA_PART21)

union all

select * from data_fenqu2 PARTITION (DATA_PART22)

);

简单做个笔记,当然,目前我是用不到,所以没有做深入的了解。如果以后有接触,会回头更新这篇博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值