暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Oracle分区表详解,实用干货

原创 IT邦德 2021-10-01
1663

默认标题_动态横版海报_202109290.gif

作者:IT邦德

中国DBA联盟(ACDU)成员,目前从事DBA及程序编程(Web\java\Python)工作,主要服务于生产制造
现拥有 Oracle 11g  OCP/OCM、Mysql、Oceanbase(OBCA)认证
分布式TBase\TDSQL数据库、国产达梦数据库以及红帽子认证
从业8年DBA工作,在数据库领域有丰富的经验
B站主播Oracle、Mysql、PG实战课程,请搜索:jeames007

微信:jem_db
QQ交流群:168797397
更多内容请关注B站(搜索jeames007)

1.概述

分区:将比较大的表或者索引拆分成更小、更易于管理的片段。
每个分区对应一个 segment;
每个分区可以存储在独立的表空间(多个空间中);
可以为分区表创建 local 或 golbal 索引。
单张表超过 2G,表中包含大量历史数据或者需要将表中数据存储在不同存储介质中时,
可以考虑使用分区表。

2.分区功能

1、增强性能
分区裁剪(Partition Pruning):可以访问具体分区的数据而避免访问整张表。
智能连接(Partition-Wise Joins):分区表和分区表关联查询,可以实现分区和分区之间的关联。
2、易于管理
提供了更小的管理单元,便于历史数据的管理。
3、提高可用性
不同分区可以存储在不同的表空间,分区之间相互独立,单个分区不可用不影响其他分区,可以对单独的分区进行备份恢复操作。

3.分区类型
3.1 范围分区

按照分区键值的范围,将数据存储在不同分区,
分区键一般是 date 或 number 类型,比较容易判断记录所在的分区,
每个分区的记录数可能不均衡。

create table t_range
partition by range (sal)
(
partition p1 values less than (1000),
partition p2 values less than (2000),
partition p3 values less than (3000)
) as select * from emp where 1=2;

##查询分区
SCOTT@ORCL> select * from t_range partition (p1);
SCOTT@ORCL> select * from t_range partition (p2);
SCOTT@ORCL> select * from t_range partition (p3);

##增加分区
SCOTT@ORCL> alter table t_range add partition PMAX values less than (maxvalue);

##split分区
alter table T_RANGE split PARTITION PMAX AT(5000)
INTO (PARTITION P5,PARTITION PMAX) UPDATE GLOBAL INDEXES;

##跨分区update
SCOTT@PROD> alter table t_range enable row movement;
SCOTT@PROD> update t_range set sal =4500 where empno=7369;
SCOTT@PROD> alter table t_range disable row movement;

3.2 list分区

通过离散的键值将数据存储在不同的分区,多用于按地域进行分区

create table stu_part (
stu_year varchar2(4),
stu_no varchar2(10),
stu_memo varchar2(2000)
)
partition  by list(stu_year)
(partition p_2012 values('2012'),
partition p_2013 values('2013'),
partition p_2014 values('2014'),
partition p_2015 values('2015'),
partition p_2016 values('2016'),
partition p_2017 values('2017','2018'),  --可以指定多个值
partition p_other values (DEFAULT)
);

INSERT INTO stu_part values('2017','jeames','学生会主席');
INSERT INTO stu_part values('2021','IT','课代表');

**3.3 间隔分区
**

CREATE TABLE sales
( prod_id NUMBER(6)
, cust_id NUMBER
, time_id DATE
, channel_id CHAR(1)
, promo_id NUMBER(6)
, quantity_sold NUMBER(3)
, amount_sold NUMBER(10,2)
)
PARTITION BY RANGE (time_id)
INTERVAL(NUMTOYMINTERVAL(1, 'MONTH'))
(
PARTITION p2006 VALUES LESS THAN (TO_DATE('1-1-2007', 'DD-MM-YYYY')),
PARTITION p2007 VALUES LESS THAN (TO_DATE('1-1-2008', 'DD-MM-YYYY')),
PARTITION p2008 VALUES LESS THAN (TO_DATE('1-1-2009', 'DD-MM-YYYY')),
PARTITION p2009 VALUES LESS THAN (TO_DATE('1-1-2010', 'DD-MM-YYYY'))
);

insert into sales values(1,10086,sysdate,1,12,30,40);

##删除分区
ALTER TABLE T_RANGE DROP PARTITION P4 UPDATE  GLOBAL INDEXE
##重命名分区
alter table t_range rename partition SYS_P21 to  p_2014_02_01;

本次分享到此结束啦~

如果觉得文章对你有帮助,点赞、收藏、关注、评论
你的支持就是我创作最大的动力。

❤️ 技术交流可以 关注公众号:IT邦德 ❤️

微信:jem_db
QQ交流群:168797397
更多内容请关注B站看直播(搜索jeames007)

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论