1.什么是分区

分区的实质是把一张大表的数据按照某种规则使用多张子表来存储。然后这多张子表使用统一的表名对外提供服务,子表实际对用户不可见。类似于在多张子表上建立一个视图,然后用户直接使用该视图来访问数据。

2.为什么要使用分区

当一张表的数据量到达上亿行的时候,表的性能会严重降低,这个时候就需要用到分区了,通过划分成多个小表,并在每个小表上建立本地索引可以大大缩小索引数据文件的大小,从而更快的定位到目标数据来提升访问性能。
分区除了可以用来提升访问性能外,还因为可以指定分区所使用的表空间,因此也用来做数据的生命周期管理。当前需要频繁使用的活跃数据可以放到访问速度更快但价格也更贵的存储设备上,而2、3年前的历史数据,或者叫冷数据可以放到更廉价、速度更低的设备上。从而降低存储费用。

3.简单分区

常用的分区方法有RANGE、HASH、LIST 3 种。
range分区通常用来对时间或数字进行分区,list分区用来把不相关的数据组织到一起,hash让数据均匀的分布到各个分区中。另外为了方便对范围分区进行管理,oracle还提供了range分区的增强类型interval(间隔)分区,当有新写入的数据的分区值超过了当前分区范围的最大值的时候,它会以分区范围的当前最大值为基数,以指定的interval 为区间,自动创建一个新分区,具体使用案例见下文。
da9d3f91844f316f83f54b9189620357.png             范围分区语法图


5a92da6da253b5b7da50336b7bb0868a.png             列表分区语法图


c44554dcb5ed819079de124c9d71039e.png

individual_hash_partitions::=
6332f9289cb791f1d263898d8a0bbcab.pnghash_partitions_by_quantity::=
ab0b51282edca9c2c98175eb96928874.png

案例:

想想这样一种情况:假设我们需要对某张表按月为单位进行分区,也许我们可以提前建好近1年的分区,但是1年的时间一过,我们就需要再添加分区了,如果没有每天定时查看分区数是否足够的话,那么就会因为分区不存在而报错,如果使用间隔分区表的话,dbms会根据分区字段的值自动添加分区。
如下例,建表的时候指定了5个分区,且分区间隔为1年,目前库里面最大的分区p2020的边界是少于2021-01-01日(范围分区的指定范围为左闭右开,即边界不包括values less than指定的值)

create table RANGE_INTERVAL(id int, name varchar2(500), update_time date)
partition by range(update_time)
interval (numtoyminterval(1,'year') )
(partition p2016 values less than (to_date('2017-01-01','yyyy-mm-dd')) compress for oltp tablespace che_data pctfree 5,
partition p2017 values less than (to_date('2018-01-01','yyyy-mm-dd')) compress for oltp pctfree 5,
partition p2018 values less than (to_date('2019-01-01','yyyy-mm-dd')) compress for oltp pctfree 5,
partition p2019 values less than (to_date('2020-01-01','yyyy-mm-dd')) compress for oltp pctfree 5,
partition p2020 values less than (to_date('2021-01-01','yyyy-mm-dd')) compress for oltp
);

表建好之后,我们看一下dbms的元数据,一个5个分区,且都不是间隔分区
e5db853f59042f7898659d013262e43e.png

 insert into RANGE_INTERVAL
select 1, 'xixi' name , sysdate + interval '1' year from dual;

插入数据后,再次查看dbms的元数据
140cb539128ec14b49550b36ba1136a6.png 可以看到多了一个分区。


4.二级分区

二级分区是可以在分区里再次根据指定的字段划分子分区,range、hash、list这三种分区类型可以两两组合形成二级分区,也可以和自己组合形成二级分区。

混合范围分区::=
37c3efccd9e2d5463883ef6961b47950.png


混合列表分区::=
58a082923641fb21ae1bb1ad9fc0a2f7.png


混合hash分区::=
58188dacd7c7dbfc3e317114e1b0b3a6.png

子分区语法图

范围子分区语法图
ceb27e35290c8ed9459c63ee2aff178b.png


列表子分区语法图
9f87acd68c8111964813a457a95b7aea.png


hash子分区语法图
eeaa44251d2ca70d6cd85b1cdf85b90a.png

4.1hash-hash二级分区使用示例

create table PPU_CELLPHONE_BAK partition by hash (data_source_id)  subpartition by hash(ENCRYPT_ID )
subpartitions 5 partitions 6

oracle分区怎么使用的更多相关文章

  1. ORACLE 分区

    在建设数据仓库过程中,经常会有大量数据,短时间内表中数据量有限,查询性能还可以,但随着时间的延长,表中数据量迅速增加,查询速度就会变慢,性能下降,这时就要考虑对表进行分区. 一.oracle的分区 当 ...

  2. oracle 分区和分区索引

    一.个人理解:建表时一般都会指定在一个表空间上,但是可能随着表空间扩大,查询越来越慢,分区表就是将一个表实际存在不同的表空间,oracle存储分为块,断,表空间.新建一个表,会给表分配指定大小的段,段 ...

  3. Oracle体系结构之Oracle分区

    目录 Oracle分区 0 一.Oracle分区理论知识 1 二.分区表的实现方式 1 1.范围分区(range partition table) 1 2.列表分区(list partitioning ...

  4. 01 Oracle分区索引

    Oracle分区索引   索引与表类似,也可以分区: 分区索引分为两类: Locally partitioned index(局部分区索引) Globally partitioned index(全局 ...

  5. Oracle分区索引

    索引与表类似,也可以分区: 分区索引分为两类: Locally partitioned index(局部分区索引) Globally partitioned index(全局分区索引) 下面就来详细解 ...

  6. Oracle分区

    可以参考文档:http://docs.oracle.com/cd/E18283_01/server.112/e16541/part_admin001.htm#insertedID0 (支持11g和12 ...

  7. ORACLE分区--表分区

    .love_flying_snow Oracle表分区 Oracle . 废话少说,直接讲分区语法. Oracle表分区分为四种:范围分区,散列分区,列表分区和复合分区. 一:范围分区 就是根据数据库 ...

  8. oracle分区提高篇

      一. 分区表理论知识 Oracle提供了分区技术以支持VLDB(Very Large DataBase).分区表通过对分区列的判断,把分区列不同的记录,放到不同的分区中.分区完全对应用透明. Or ...

  9. 柯南君 :Oracle 分区技术 之 怎样支撑大数据操作?

    前段时间.看了罗女士( 资深技术顾问 - Oracle 中国 顾问咨询部)关于<大批量数据处理技术的演讲>视频.感觉受益良多,结合多年的知识积累,柯南君给大家分享一下: 交流内容: 一.O ...

  10. [Oracle]分区索引

    上一节学习了分区表,接着学习分区索引. (一)什么时候对索引进行分区 · 为了避免移动数据时重建整个索引,可对索引分区,在重建索引时,只需重建与数据分区相关的索引: · 在对分区表进行维护时,为了避免 ...

随机推荐

  1. MyBatis使用LocalDateTime遇到的一系列问题

    问题 在Mybaits中传入参数为LocalDateTime,查询发现结果集为空,插入时发现时间相差13小时 测试 新建工程,新建测试库(主要此处新工程使用的JDBC为mysql-connector- ...

  2. 用python进行实际地址经纬度提取

    实际地址经纬度提取 请求接口: https://apis.map.qq.com/ws/place/v1/suggestion/ 所需参数: 参数名称 是否必须 参数类型 说明 keyword 是 St ...

  3. pyttsx3 的使用教程

    import pyttsx3 def use_pyttsx3(): # 创建对象 engine = pyttsx3.init() # 获取当前语音速率 rate = engine.getPropert ...

  4. Typescript node starter 1.Express Typescript

    启动项目 Express 是一个nodejs框架,用于构建Web后端应用程序.它非常的灵活,你可以用你喜欢的方式去使用他.在这个系列文章里,记录了我使用typescript express去构建一个w ...

  5. xfs文件系统修复方法

    1. 前言首先尝试mount和umount文件系统,以便重放日志,修复文件系统,如果不行,再进行如下操作.fdisk -l 查看硬盘分区情况mount -l 查看文件系统挂载情况df -h 查看文件系 ...

  6. Docker系列——Docker安装&基础命令

    Docker 概述 Docker 是一个开源的应用容器引擎,Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化. ...

  7. Manico--自定义应用快速切换

    快速切换应用的app,使用非常频繁,奈何还是没有钱! 这玩意儿虽然免费,但是时不时跳一个弹框让你购买,也是够烦的,然后我们正好利用逆向工具,对着玩意儿进行破解,让它不再弹框! 下载安装Hopper D ...

  8. JS继承 小白文

    继承我的理解是 一个对象 能够使用另一个对象的方法和属性 继承需要一个父类构造函数 一.通过原型链继承 通过 创建一个 Person 的实例对象,该对象身上 不仅有 name 和 age 等方法, 也 ...

  9. Node.js小项目——学生信息管理系统

    这是迄今为止第一次接触后端的东西,是一个很小的项目,但是对于前端学习入门很好.我是先学了VUE框架再学的Node,学起来比较轻松,不过每个人都有自己的学习方法️ 一.项目描述 学生信息管理系统,可以实 ...

  10. 赫然:Windows Live Writer 批量博客更新软件使用教程

    http://www.wocaoseo.com/thread-144-1-1.html 推广人员需要使用多个博客,一个一个登陆更新是很麻烦的事情,网上的桌面批量更新博客软件也不少,今天在此推荐大家使用 ...