Oracle分区

news/2024/11/23 23:32:41/

ORACLE 分区

  • 分区的原因
  • 分区的优势
  • 分区方式
    • 分区sql说明
    • 分区方式

oracle 11g 支持自动分区,不过得在创建表时就设置好分区。

分区的原因

单表的数据量如果太大,会影响到读写性能。我们可以使用分库分表来解决单表的性能问题。Oracle的分区表是将一张大表在物理上分成几张较小的表,从逻辑上来看仍然是一张完整的表。这样每次DML操作可以只考虑其中一张分区表。oracle建议单表大小超过2GB时就使用分区表。
分区功能能够将表、索引或索引组织表进一步细分为段,从而能够更精确地管理和访问这些数据库对象。这些数据库对象的段叫做分区。
分区表应用在大表更合适,至少要大于100万条的记录才可以考虑使用分区表。
现实中的场景:图书馆的图书分区

分区的优势

(IO速度、删除、查询、维护、安全)

  1. 由于Oracle数据库可以将分区指定为不同的表空间,而不同的表空间是可以指向不同的磁盘设备的,在很多时候,磁盘设备的I/O速度是系统进行数据操作的瓶颈,而分区并行,则起到了优化物理硬件资源,从而缩短了执行的时间的作用。

  2. 分区,就类似于我们将图书分类放到了不同的区间中,这个时候,我们就可以只针对其中的某一类图书进行操作,比如进行该类书籍的查询、上架、下架、甚至将该类图书付之一炬,这带来了两个特别大的优势,第一,我们无视其他分区的数据;第二,我们可以很方便的对本区的数据进行删除操作。

  3. 提高了特定的查询速度,比如我们现在只需要查找IT类图书的数量,因为我们能够在第一意识中,排除其他非IT类书籍,必然会提高查询的性能。

  4. 节约维护的成本,传统的维护操作,例如重建索引等,因为有锁机制的存在,是会影响到其他人的读取和更新删除操作的,但是由于有了分区,我们在维护IT类书籍的时候,就不会对其他分类的数据造成影响,这个时候,可以降低因为维护数据而对其他系统数据产生的各种影响。

  5. 从安全的角度上而言,我们将不同的分区放在不同的表空间当中,就类似于我们没有将所有的鸡蛋放到一个篮子里面,必然会带来安全方面的提升。

(转载,原文链接:https://blog.csdn.net/ziwen00/article/details/9158725)

分区方式

分区sql说明

建表时:通过PARTITION BY RANGE(字段名) 关键字来指出进行按哪个字段进行分区的策略

分区方式

  1. 范围分区
    例如:日期分类;
DROP TABLE PART_LOG_CHENZW PURGE;CREATE TABLE PART_LOG_CHENZW(LOG_ID NUMBER(20) PRIMARY KEY,LOG_DATE DATE,LOG_DESC VARCHAR2(20)
)
PARTITION BY RANGE(LOG_DATE)
(PARTITION PART_LOG_01 VALUES LESS THAN (TO_DATE('2013-01-01','YYYY-MM-DD')) TABLESPACE DATA,PARTITION PART_LOG_02 VALUES LESS THAN (TO_DATE('2013-03-01','YYYY-MM-DD')) TABLESPACE DATA,PARTITION PART_LOG_03 VALUES LESS THAN (TO_DATE('2013-05-01','YYYY-MM-DD')) TABLESPACE DATA,PARTITION PART_LOG_07 VALUES LESS THAN (MAXVALUE) TABLESPACE DATA
);
MAXVALUE 避免有数值没有被上面的范围圈定

插入数据后查询分区:

SELECT COUNT(1) FROM PART_LOG_CHENZW PARTITION (PART_LOG_05);

查询分区结构:
DBA_PART_TABLES和DBA_TAB_PARTITIONS


SELECT T.OWNER AS "所有者",T.TABLE_NAME AS "表名",T.PARTITIONING_TYPE AS "分区类型",T.SUBPARTITIONING_TYPE AS "子分区类型",T.PARTITION_COUNT AS "子分区数量",T.PARTITIONING_KEY_COUNT AS "分区键中列的数量",T.SUBPARTITIONING_KEY_COUNT AS "子分区键中列的数量",T.STATUS AS "分区表状态",T.DEF_TABLESPACE_NAME AS "默认表空间"FROM DBA_PART_TABLES TWHERE T.TABLE_NAME IN ('PART_LOG_CHENZW');

查询分区数据结构:


SELECT T.TABLE_OWNER AS "所有者",T.TABLE_NAME AS "表名",T.COMPOSITE AS "是否组合分区",T.PARTITION_NAME AS "分区名",T.SUBPARTITION_COUNT AS "子分区数",T.HIGH_VALUE AS "分区上限",T.HIGH_VALUE_LENGTH AS "分区上限长度",T.PARTITION_POSITION AS "分区在表中位置",T.TABLESPACE_NAME AS "所在表空间"FROM DBA_TAB_PARTITIONS T
WHERE T.TABLE_NAME IN ('PART_LOG_CHENZW')

查看分区表占用的磁盘空间信息:

SELECT T.SEGMENT_NAME AS "段名",T.PARTITION_NAME AS "分区名",T.SEGMENT_TYPE AS "分区类型",T.BYTES / POWER(1024, 2) || 'M' AS "分区大小",T.TABLESPACE_NAME AS "表空间"FROM USER_SEGMENTS TWHERE T.SEGMENT_NAME IN ('PART_LOG_CHENZW');
  1. 列表分区
    如果数据中的某一项是可以被枚举的,那么,此列就可以用作列表分区的分区字段。

建表、分区:

DROP TABLE PART_BOOK_CHENZW PURGE;CREATE TABLE PART_BOOK_CHENZW(BOOK_ID NUMBER(20) PRIMARY KEY,BOOK_DATE DATE,BOOK_TYPE NUMBER(2) NOT NULL,BOOK_DESC VARCHAR2(20)
)
PARTITION BY LIST(BOOK_TYPE)
(PARTITION PART_BOOK_01 VALUES(0) TABLESPACE DATA,PARTITION PART_BOOK_02 VALUES(1) TABLESPACE DATA,PARTITION PART_BOOK_03 VALUES(2) TABLESPACE DATA,PARTITION PART_BOOK_04 VALUES(3) TABLESPACE DATA
);
  1. 散列分区
    散列分区的更多的作用在于分散数据,通过将数据均匀分布从而规避I/O瓶颈,但是这个在平时的生产中比较少用到。

CREATE TABLE PART_BOOK_CHENZW(BOOK_ID NUMBER(20) PRIMARY KEY,BOOK_DATE DATE,BOOK_TYPE NUMBER(2) NOT NULL,BOOK_DESC VARCHAR2(20)
)
PARTITION BY HASH(BOOK_ID)
(PARTITION PART_BOOK_01 TABLESPACE DATA,PARTITION PART_BOOK_02 TABLESPACE DATA,PARTITION PART_BOOK_03 TABLESPACE DATA,PARTITION PART_BOOK_04 TABLESPACE DATA
);
  1. 组合分区
    将一大堆数据通过分区拆解为若干个小标进行管理,从而降低了管理的粒度,做到“精细化管理”。

CREATE TABLE PART_BOOK_CHENZW(BOOK_ID NUMBER(20) PRIMARY KEY,BOOK_DATE DATE,BOOK_TYPE NUMBER(2) NOT NULL,BOOK_DESC VARCHAR2(20)
)
PARTITION BY LIST(BOOK_TYPE)
SUBPARTITION BY RANGE(BOOK_DATE)
SUBPARTITION TEMPLATE
(SUBPARTITION PART_LOG_01 VALUES LESS THAN (TO_DATE('2013-01-01','YYYY-MM-DD')) TABLESPACE DATA,SUBPARTITION PART_LOG_02 VALUES LESS THAN (TO_DATE('2013-03-01','YYYY-MM-DD')) TABLESPACE DATA,SUBPARTITION PART_LOG_03 VALUES LESS THAN (TO_DATE('2013-05-01','YYYY-MM-DD')) TABLESPACE DATA,SUBPARTITION PART_LOG_04 VALUES LESS THAN (TO_DATE('2013-07-01','YYYY-MM-DD')) TABLESPACE DATA,SUBPARTITION PART_LOG_05 VALUES LESS THAN (TO_DATE('2013-09-01','YYYY-MM-DD')) TABLESPACE DATA,SUBPARTITION PART_LOG_06 VALUES LESS THAN (TO_DATE('2013-10-01','YYYY-MM-DD')) TABLESPACE DATA,SUBPARTITION PART_LOG_07 VALUES LESS THAN (MAXVALUE) TABLESPACE DATA
)
(PARTITION PART_BOOK_01 VALUES(0) TABLESPACE DATA,PARTITION PART_BOOK_02 VALUES(1) TABLESPACE DATA,PARTITION PART_BOOK_03 VALUES(2) TABLESPACE DATA,PARTITION PART_BOOK_04 VALUES(3) TABLESPACE DATA
);

整理和参考:
https://blog.csdn.net/ziwen00/article/details/9158725


http://www.ppmy.cn/news/547059.html

相关文章

Kafka分区策略

生产者分区策略 1.分区的原因 (1)方便在集群中扩展,每个Partition可以通过调整以适应它所在的机器,而一个topic又可以有多个Partition组成,因此整个集群就可以适应任意大小的数据了; (2&…

数据库分区、分表、分库、分片

一、分区的概念 数据分区是一种物理数据库的设计技术,它的目的是为了在特定的SQL操作中减少数据读写的总量以缩减响应时间。 分区并不是生成新的数据表,而是将表的数据均衡分摊到不同的硬盘,系统或是不同服务器存储介子中,实际上还…

格式化U盘为FAT32

使用fdisk格式化U盘 查看硬盘挂载点 df 卸载挂载的硬盘 umount /media/xxx/8CDA-0A87擦除硬盘分区信息 mkfs.vfat /dev/sdb -I创建新的分区 #fdisk打开硬盘/dev/sdb sudo fdisk /dev/sdb #创建新分区 n #选择创建主分区 p #选择分区数目 1 #输入起始扇区,使用默认值…

MySQL基础篇(day02,复习自用)

MySQL第二天 基本的SELECT语句大小规范注释命名规则数据导入指令select语句练习 运算符代码练习 基本的SELECT语句 SQL 可以写在一行或者多行。为了提高可读性,各子句分行写,必要时使用缩进 每条命令以 ; 或 \g 或 \G 结束 关键字不能被缩写也不能分行 关…

PyQt5中文手册

PyQt5中文手册 一、介绍 本教程的目的是带领你入门PyQt5。教程内所有代码都在Linux上测试通过。PyQt4 教程是PyQt4的教程,PyQt4是一个Python(同时支持2和3)版的Qt库。 关于 PyQt5 PyQt5 是Digia的一套Qt5应用框架与python的结合&#xff…

20230331英语学习

thorn n.刺,荆棘;带刺小灌木 burrow v.挖掘,挖地洞;寻找,探索 differential adj.差别的,有区别的;微分的 affluent adj.丰富的;富裕的 budget n.预算 ancient adj.古代的&#…

20230402英语学习

reasonable adj.合理的;通情达理的;明智的,理智的 abstract adj.抽象的,理论的 reflection n.反射; 映像, 倒影; 反映; 表达, 抒发; (长相等)酷似的人; 惟妙惟肖的事物; 深思; 考虑 instruction n.教授; 教导, 指导; 指示, 命令…

20230228英语学习

How to Sell Your Ideas at Work and Get Higher-Ups to Listen 职场必备技能:向他人“贩卖”你的观点 前言 先啰嗦几句,这就是昨天做的事情,当然一股脑儿做这个东西确实很缺乏经验,如何让一个门外汉都能心动,这就成…