Oracle分区-程序员宅基地

技术标签: oracle  数据库  

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 T
 WHERE 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 T
 WHERE 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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_38005873/article/details/124398188

智能推荐

@Autowired注解getBean为null_getbean null-程序员宅基地

文章浏览阅读2.6k次。直接上代码:debug发现@Autowired的定义的变量都是为null,再看看这个service是否加了注解:结果发现这个service加了@Service这个注解,那么问题出现在哪呢?查找进入这个service的入口发现:使用这个service的时候是new出来的对象,而不是使用@Autowired来获取的,所以导致这个service不能获取spring_getbean null

Windows Server 2016-命令行Ntdsutil迁移FSMO角色-程序员宅基地

文章浏览阅读131次。上章节我们介绍了有关图形化界面迁移FSMO角色,进行本章节之前我们首先回顾一下FSMO的五种操作主机角色:架构主机角色(Schema Master)、域命名主机角色(Domain Naming Master)、RID 主机角色(RID Master)、PDC 模拟主机角色(PDC Emulator)和基础架构主机角色(Infrastructure Master);不管是林范围主机角色还是..._一、下面是通过 ntdsutil 方式进行转移

python编码格式_non-ascii character '\xc9' in file-程序员宅基地

文章浏览阅读370次。#!/usr/bin/env Python# -*- coding: gbk -*- #上面这句很重要,声明了python文件编码,常用的编码方式有utf8/utf-8/gbk/gb2312,没有此句会报错,#SyntaxError: Non-ASCII character '\xc9' in file request1.py on line 3, but no encoding _non-ascii character '\xc9' in file

为什么要参加PMP考前培训?有什么好处?_pmp培训目的-程序员宅基地

文章浏览阅读177次。PMP是指项目管理专业人士资格认证。它是由美国项目管理协会(Project Management Institute(PMI)发起的,严格评估项目管理人员知识技能是否具有高品质的资格认证考试。其目的是为了给项目管理人员提供统一的行业标准。目前,美国项目管理协会建立的认证考试有:PMP(项目管理师)已在全世界200多个国家和地区设立了认证考试机构。PMP培训也是一种较为专业的学习,是把项目管理作为一种科学理论来学习,但最后还要在实践中灵活运用。PMP培训把项目管理作为一门独立的学科来学习,把项目管_pmp培训目的

vmvare虚拟机连网-程序员宅基地

文章浏览阅读451次。安装完虚拟机,及相应的操作系统后。会在控制面板里的网络连接面板里多出两个连接,一个是VMnet1,一个是VMnet8两个都是虚拟网卡,用于虚拟机内操作系统连网用的。可以通过两种方式连网:1)bridged的网桥方式2)NAT方式需要相应的设置。启动对应的网卡,在vm settings->ERTHENET 里选择对应的连网方式。

HADOOP HDFS详解_hadoop详细-程序员宅基地

文章浏览阅读1k次,点赞16次,收藏21次。Volume: 数据量非常大Variety:数据类型多样化,组成庞大的数据集的数据,有结构化的,半结构化的非结构化的数据。Velocity:数据增长的速度非常快Value: 数据的价值低数据快速增长超过硬件存储及传输增长的速度因硬件故障造成的数据丢失读取的数据的正确性hadoop是Apache基金会旗下一个开源的分布式存储和分析计算平台,使用java语言开发,具有很好的跨平台性,可以运行在商用(谦价)硬件上,用户无需了解分布式底层细节,就可以开发分布式程序,充分使用集群的高速计算和存储。_hadoop详细

随便推点

odoo9.0 如何将链接指向自定义form_odoo form_view_ref-程序员宅基地

文章浏览阅读2.3k次。1、链接默认指向原生form中。2、如果想让该链接跳转到自定义的form中,需要配置context,在其中增加form_view_ref属性,比如context="{'form_view_ref': 'odoo9_model.odoo9_product_hxy_form'}",odoo9_model是moduls模块名称,odoo9_product_hxy_form_odoo form_view_ref

T-Mobile G1手机入手作业-程序员宅基地

文章浏览阅读199次。新的T-Mobile G1手机是不能够直接使用的,我们必须要对它进行破解操作(也就是激活系统)。目前有两种比较简单有效的方法供用户们选择,一种是去某些网站直接花USD购买激活码,另一种方法就是使用卡贴。下面就开始我的android之旅~1、同步联系人注册Gmail邮箱注册Gmail邮箱  首先,你要去申请一个gmail的邮箱,然后把你的联系人从其他的手机导入gmail邮箱中。我...

linux 访问控制列表(ACL)和GPG安全详解和操作示例-程序员宅基地

文章浏览阅读495次,点赞17次,收藏8次。当你需要在Linux系统上实现更细粒度的文件访问控制和数据加密时,可以使用访问控制列表(ACL)和GNU Privacy Guard(GPG)来提高文件和数据的安全性。

后台开发经典书籍--linux性能优化_linux系统调优书-程序员宅基地

文章浏览阅读513次,点赞7次,收藏2次。_linux系统调优书

Oracle prompt、set feedback、set define 详解_prompt importing table-程序员宅基地

文章浏览阅读3.6k次,点赞5次,收藏25次。文章目录1 结论2 演示3 详解3.1 prompt3.2 set feedback3.3 set define1 结论prompt : 提示信息,prompt 后面的内容原样输出set feedback:反馈信息,每执行一条 sql 命令,Oracle 都会给一条反馈信息,如: (1) 创建表成功时,Oracle 会反馈 Table created (2) 插入一条数据时,Oracle 会反馈 1 row inserted (3) _prompt importing table

Matlab制作表格_matlab制表-程序员宅基地

文章浏览阅读5k次,点赞6次,收藏21次。Matlab制作表格代码:效果:_matlab制表