Oracle的表分区功能通过改善可管理性、性能和可用性,从而为各式应用程序带来了极大的好处。通常,分区可以使某些查询以及维护操

当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,有可能不需要每次都扫描整张表。

Oracle的表分区功能通过改善可管理性、性能和可用性,从而为各式应用程序带来了极大的好处。通常,分区可以使某些查询以及维护操作的性能大大提高。此外,分区还可以极大简化常见的管理任务,分区是构建千兆字节数据系统或超高可用性系统的关键工具。

分区功能能够将表、索引或索引组织表进一步细分为段,这些数据库对象的段叫做分区。每个分区有自己的名称,还可以选择自己的存储特性。从数据库管理员的角度来看,一个分区后的对象具有多个段,这些段既可进行集体管理,也可单独管理,这就使数据库管理员在管理分区后的对象时有相当大的灵活性。从应用程序的角度来看,分区后的表与非分区表完全相同,使用 SQL DML 命令访问分区后的表时,无需任何修改。

什么时候使用分区表:

1、表的大小超过2GB或者表的行数有可能超过500万。

2、对不同的数据需要进行不同的批量处理。

表分区的优缺点

表分区优点:

1、改善性能:对分区对象的查询可以仅搜索自己关心的分区,提高使用速度。

2、增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;

3、维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;

4、均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能。

表分区缺点:

1.如果使用不当,会降低性能;比如没有指定分区的读操作;

2.在重要数据场合,一个分区出错,这个服务(事务)必须要停下来,比如支付系统;

3.使用分区后,同样的数据,备份数据比没有分区前要慢很多,体积要大很多;

4.如果使用不当,会降低吞吐量

表分区的几种类型及操作方法

一、范围分区:

范围分区将数据基于范围映射到每一个分区,这个范围是你在创建分区时指定的分区键决定的。这种分区方式是最为常用的,并且分区键经常采用日期。举个例子:你可能会将销售数据按照月份进行分区。

当使用范围分区时,请考虑以下几个规则:

1、每一个分区都必须有一个VALUES LESS THEN子句,它指定了一个不包括在该分区中的上限值。分区键的任何值等于或者大于这个上限值的记录都会被加入到下一个高一些的分区中。

2、所有分区,除了第一个,都会有一个隐式的下限值,这个值就是此分区的前一个分区的上限值。

3、在最高的分区中,MAXVALUE被定义。MAXVALUE代表了一个不确定的值。这个值高于其它分区中的任何分区键的值,也可以理解为高于任何分区中指定的VALUE LESS THEN的值,同时包括空值。

例一:

假设有一个tel表,表中有数据2000万行,我们将此表通过id进行分区,每个分区存储1000万行,我们将每个分区保存到单独的表空间中,这样数据文件就可以跨越多个物理磁盘。下面是创建表和分区的代码,如下:

CREATE TABLE TEL

(

ID NUMBER NOT NULL PRIMARY KEY,

PHONE VARCHAR2(15) NOT NULL

)

PARTITION BY RANGE (ID)

(

PARTITION TEL_PART1 VALUES LESS THAN (100000000) TABLESPACE TEL_TS01,

PARTITION TEL_PART2 VALUES LESS THAN (200000000) TABLESPACETEL_TS02

)

二.列表分区:

该分区的特点是某列的值只有几个,基于这样的特点我们可以采用列表分区。比如我们的tel表,这张表由上海,北京两个地方主要使用,

create table TEL

(

ID INTEGER not null,

PROV_REGION_CODE INTEGER,

CITY_REGION_CODE INTEGER,

SUB_CITY_REGION_CODE INTEGER,

PHONE VARCHAR2(16)

)

partition by list(PROV_REGION_CODE)

(

partition PART11 values (110000),

partition PART31 values (310000),

partition PARTDFT values (default)

);

这个分区创建在PROV_REGION_CODE字段上。

partition PART11values (110000) 表示北京;

partition PART31values (310000) 表示上海;

partition PARTDFTvalues (default),其他地方的数据,都放在这个默认分区。

110000 和310000 是中国国家规划的省一级代码。

三.散列分区:

这类分区是在列值上使用散列算法,以确定将行放入哪个分区中。当列的值没有合适的条件时,建议使用散列分区。

散列分区为通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O设备上进行散列分区,使得这些分区大小一致。

例一:

CREATE TABLE HASH_TEL

(

COL NUMBER(8),

INF VARCHAR2(100)

)

PARTITION BY HASH (COL)

(

PARTITION PART01 TABLESPACE HASH_TS01,

PARTITION PART02 TABLESPACE HASH_TS02,

PARTITION PART03 TABLESPACE HASH_TS03

);

hash分区最主要的机制是根据hash算法来计算具体某条纪录应该插入到哪个分区中,hash算法中最重要的是hash函数,Oracle中如果你要使用hash分区,只需指定分区的数量即可。建议分区的数量采用2的n次方,这样可以使得各个分区间数据分布更加均匀。

hash分区写入的效率是非常不错的,但是读出来的效率是不乐观的,因此要注意业务场景。

四.复合分区

复合分区是一种分区,嵌入另外一种分区,下面这个例子是基于范围分区和列表分区,,表首先按某列进行范围分区,然后再按某列进行列表分区,分区之中的分区被称为子分区。

CREATE TABLESALES

(

ID INTEGER,

SALES_DATEDATE,

STATUSVARCHAR2(20)

)

PARTITION BYRANGE(SALES_DATE) SUBPARTITION BY LIST (STATUS)

(

PARTITION P1 VALUES LESSTHAN(TO_DATE('2012-01-01','YYYY-MM-DD'))

(

SUBPARTITION P1SUB1 VALUES('ACTIVE'),

SUBPARTITION P1SUB2 VALUES('INACTIVE')),

PARTITION P2 VALUES LESS THAN (TO_DATE('2013-01-01','YYYY-MM-DD'))

(

SUBPARTITION P2SUB1 VALUES('ACTIVE'),

SUBPARTITION P2SUB2 VALUES('INACTIVE')

)

)

使用的时候必须谨慎,越复杂的对象,要把握好越难。

一些特殊的使用场景:

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

Oracle分区详解和创建,数据库优化-Oracle表分区的创建和分类相关推荐

  1. 详解MySQL information_schema数据库常用的表信息以及各表对应的字段信息;以及如何登录mysql和创建视图

    详解information_schema数据库 登录mysql 查询information_schema信息 information_schema常用数据表 TABLES 查询tables table ...

  2. SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解(SQL数据库和Oracle数据库的区别)...

    我们经常会遇到需要表复制的情况,如将一个table1的数据的部分字段复制到table2中,或者将整个table1复制到table2中,这时候我们就要使用SELECT INTO 和 INSERT INT ...

  3. [精]Oracle VPD详解(虚拟专用数据库)

    所谓虚拟专用数据库(VPD)指的是,通过在数据库里进行配置,从而让不同的用户只能查看某 个表里的部分数据.VPD分为以下两个级别. 行级别:在该级别下,可以控制某些用户只能查看到某些数据行.比如,对于 ...

  4. linux+fdisk+分区,Linux下Fdisk分区详解

    那么你知道Linux下Fdisk分区详解么?接下来是小编为大家收集的Linux下Fdisk分区详解,欢迎大家阅读: Linux下Fdisk分区详解 1. 通过Fdisk查看系统分区详细信息: Fdis ...

  5. Mysql创建数据库和新建表

    创建数据库和新建表 需求:创建一个school数据库,在里面新建一个student表,表中有学生学号id,学生姓名name,学生年龄age,学生专业pre,并为其存入具体的数据 创建数据库 这样就创建 ...

  6. oracle添加分区语句_Oracle分区详解和创建

    Oracle分区详解和创建 Oracle在实际业务生产环境中,经常会遇到随着业务量的逐渐增加,表中的数据行数的增多,Oracle对表的管理和性能的影响也随之增大.对表中数据的查询.表的备份的时间将大大 ...

  7. oracle list 分区详解,ORACLE分区表详解

    此文从以下几个方面来整理关于分区表的概念及操作:1.表空间及分区表的概念 2.表分区的具体作用 3.表分区的优缺点 4.表分区的几种类型及操作方法 5.对表分区的维护性操作. (1.) 表空间及分区表 ...

  8. oracle list 分区详解,Oracle分区表详解:

    Oracle分区表详解: 范围分区 范围分区根据您为每个分区建立的分区键值的范围将数据映射到分区.它是最常见的分区类型,通常与日期一起使用.例如,您可能希望将销售数据分区为每月分区. 使用范围分区时, ...

  9. oracle scn 重置,学习笔记:Oracle SCN详解 SCN与Oracle数据库恢复的关系

    天萃荷净 分享一篇关于Oracle SCN的详解,介绍SCN与Oracle数据库恢复的关系和SCN在数据库中的作用 一.为什么需要System checkpoint SCN号与Datafile Che ...

最新文章

  1. 冒泡法排序c语言函数模板,使用模板技术的冒泡排序
  2. python 梯度提升树_机器学习:梯度提升算法|python与r语言代码实现
  3. WordPress简洁博客主题:Sweet主题
  4. Qt学习之路(51): QByteArray和QVariant
  5. mysql 显示重叠_一句话实现MySQL库中的重叠分组
  6. Stanford机器学习---第4讲. 神经网络的表示 Neural Networks representation
  7. 用户级线程和内核级线程
  8. Markdown书写软件Typora的使用--图片上传(PicGo与Github/Gitee)及排版
  9. Tikhonov regularization 吉洪诺夫 正则化
  10. 发那科syst178_南京发那科机器人示教器维修芯片级维修{苏州机器人维修}
  11. python:计算自己的bmi值
  12. Selenium 循环删除页面元素
  13. 201771010137 赵栋 《面向对象程序设计(java)》第十三周学习总结
  14. 强化学习(Reinforcement Learning)
  15. win7 简易版升级旗舰版
  16. 微信自动回复小程序(有手就行)
  17. js时间戳与标准时间的相互转换
  18. 夏普GP2Y1010AU0F灰尘传感器使用
  19. 计算广告关键技术:他们怎么什么都知道?
  20. 大学计算机基础信息编码,大学计算机基础-编码.ppt

热门文章

  1. 阿里天池-python训练营task1
  2. 风机性能测试的软件设计,风机性能测试系统的设计与研究
  3. Dreamweaver Flash Photoshop网页设计基础与实例教程(职业白金版)
  4. QT带界面库生成方法
  5. IDEA查看类UML图
  6. 朱 蚌埠机器人餐厅_据说,这是蚌埠人气爆棚10家自助餐厅!你吃过几家?!
  7. DataX 工具安装部署及使用
  8. 还在用JSON? Google Protocol Buffers 更快更小 (原理篇)
  9. CW MCU v11.1学习笔记1
  10. 基于Arduino,使用三个开关控制电机的正转,反转,和停转