详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp51

[align=center;]

Oracle之range,hash,list分区现实应用及优缺点汇总

[/align]

引言:Oracle的range,hash,list三大分区可能我们大家在熟悉不过了,但什么每种分区适用于什么场景可能是很多人的疑惑点,那么在选择不同的分区时应该注意什么,为什么这么选,有哪些需要我们加以注意的地方,让我们一一来探索一下吧:)

A.创建range分区,一般用于日期化处理,range分区可以很好的管理基于日期来分区的数据

创建一个新用户ls

SYS@LEO> create user ls identified by ls;

SYS@LEO> grant dba to ls;

SYS@LEO> conn ls/ls

创建样本数据表

create table liusheng (orderid number(10),name varchar2(10),ls_date date);

insert into liusheng values (1,'ls1',to_date('1981-01-02','yyyy-mm-dd'));

insert into liusheng values (1,'ls2',to_date('1998-01-03','yyyy-mm-dd'));

insert into liusheng values (1,'ls3',to_date('1999-01-04','yyyy-mm-dd'));

insert into liusheng values (1,'ls4',to_date('2000-01-05','yyyy-mm-dd'));

insert into liusheng values (1,'ls5',to_date('2000-01-06','yyyy-mm-dd'));

insert into liusheng values (1,'ls6',to_date('2001-01-07','yyyy-mm-dd'));

insert into liusheng values (1,'ls7',to_date('2001-01-08','yyyy-mm-dd'));

insert into liusheng values (1,'ls8',to_date('2002-01-09','yyyy-mm-dd'));

insert into liusheng values (1,'ls9',to_date('2002-01-10','yyyy-mm-dd'));

insert into liusheng values (1,'ls10',to_date('2011-01-11','yyyy-mm-dd'));

创建range分区表

create table liusheng_part

partition by range (ls_date)

(

partition liusheng_part_1999_1 values less than (to_date('1999-01-01','yyyy-mm-dd')) ,

partition liusheng_part_2000_1 values less than (to_date('2000-01-01','yyyy-mm-dd')) ,

partition liusheng_part_2001_1 values less than (to_date('2001-01-01','yyyy-mm-dd')) ,

partition liusheng_part_2002_1 values less than (to_date('2002-01-01','yyyy-mm-dd')) ,

partition liusheng_part_2003_1 values less than (to_date('2003-01-01','yyyy-mm-dd')) ,

partition other values less than (maxvalue)

)

as select * from liusheng;

查看分区

select * from liusheng_part partition (liusheng_part_1999_1);

select * from liusheng_part partition (liusheng_part_2000_1);

select * from liusheng_part partition (liusheng_part_2001_1);

select * from liusheng_part partition (liusheng_part_2002_1);

select * from liusheng_part partition (liusheng_part_2003_1);

select * from liusheng_part partition (other);

B.创建hash分区,利用hash函数打散某列使数据均匀分布,一般用于均衡I/O,缺点数据不容易管理,哈希分区不能DROP、SPLIT 以及MERGE分区

我们创建了拥有10个分区的哈希分区表“LIUSHENG_HASH”

LS@LEO> create table liusheng_hash partition by hash(object_id) partitions 10 as select * from dba_objects;

hash分区所占用的区个数,看每个分区占用的个数都差不多,说明数据还是比较均匀分布的

缺点:hash列上数值不能有太多的重复值,否则会导致数据分布不均匀

select partition_name,count(*) from user_extents where segment_name='LIUSHENG_HASH' group by partition_name;

PARTITION_NAME                   COUNT(*)

------------------------------ ----------

SYS_P27                                 3

SYS_P26                                 3

SYS_P22                                 2

SYS_P28                                 3

SYS_P29                                 2

SYS_P21                                 2

SYS_P23                                 3

SYS_P25                                 3

SYS_P30                                 2

SYS_P24                                 3

select count(*) from liusheng_hash;

COUNT(*)

----------

       9860

C.创建list分区,一般用于数据可枚举,有限个值,可以考虑列表分区,例如国家名字,按州来分区

创建list分区表,我们按国家来分别存放在不同的州,每个州是一个分区

create table liusheng_list

(city_id NUMBER(5),

city_name VARCHAR2(30),

city_state VARCHAR2(20),

city_amount NUMBER(10)

)

partition by list (city_name)

(

partition  asia VALUES('china','japan'),

partition  europe VALUES ('germany','italy'),

partition  africa VALUES('libya','brazil'),

partition  other  VALUES(DEFAULT)              --默认分区

);

插入数据

insert into liusheng_list values(1,'china','asia',100);

insert into liusheng_list values(2,'germany','europe',101);

insert into liusheng_list values(3,'libya','africa',102);

insert into liusheng_list values(4,'liusheng_city','other',103);

查看数据

LS@LEO> select * from liusheng_list;

CITY_ID COUNTRY_NAME                   STATE                CITY_AMOUNT

---------- ------------------------------ -------------------- -----------

          1 china                                               asia                         100

          2 germany                                      europe                       101

          3 libya                                                 africa                       102

          4 liusheng_city                                 other                        103

小结:测试了上面的三大分区后,我相信现在不仅仅有感性的认识而且也加深了理性的认识,分区是个好东西,合理的利用可以提高我们管理收益(但不一定会提高查询收益),使用不当也会给我们添加许多麻烦,三思而后行是做DBA的一个好习惯。

补充:分区之优势

分区技术实质可以把数据分摊到不同的物理位置,增加I/O负载,提高检索效率。

可用性:分区表可以跨越表空间,而普通表则不然,好处就是如果表的一个分区损坏,其他分区不会受到影响我们只需要修复损坏的分区即

可

Oracle之range,hash,list分区现实应用及优缺点汇总的更多相关文章

  1. oracle 表连接 - hash join 哈希连接

    一. hash 连接(哈希连接)原理 指的是两个表连接时, 先利用两表中记录较少的表在内存中建立 hash 表, 然后扫描记录较多的表并探測 hash 表, 找出与 hash 表相匹配的行来得到结果集 ...

  2. ORACLE表、索引和分区详解

    ORACLE表.索引和分区 一.数据库表 每种类型的表都有不同的特性,分别应用与不同的领域 堆组织表 聚簇表(共三种) 索引组织表 嵌套表 临时表 外部表和对象表 1.行迁移 建表过程中可以指定以下两 ...

  3. Oracle 分区表管理之组合分区(分区索引失效与性能比较)

    整体结构如下: Oracle  分区表管理之组合分区(分区索引失效与性能比较) 虽然老早就使用了分区表,终于有时间写有关分区表的内容:不是所有的场景数据量变大需要用到分区表,一般单表数据超过2g可以考 ...

  4. Oracle间隔(interval)分区

    (一)什么是间隔分区 间隔分区是Oracle 11.1引入的新功能,通过该功能,可以在输入相应分区的数据时自动创建相应的分区.在没有间隔分区技术之前,DBA通常会创建一个maxvalue分区以避免OR ...

  5. SWAP_JOIN_INPUTS Oracle Hint(处理hash join强制大表(segment_size大)作为被驱动表)

    SWAP_JOIN_INPUTS Oracle Hint(处理hash join强制大表(segment_size大)作为被驱动表) swap_join_inputs是针对哈希连接的hint,它的含义 ...

  6. Oracle ASM无法识别扩展分区的磁盘设备

    在linux 环境下,我们一般通过udev或者asmlib来绑定磁盘分区作为ASM的候选存储单元.在使用udev的情况下,一般只要我们可以看到被绑定的磁盘的设备,并且这些设备的属主和权限没有问题,AS ...

  7. 对Oracle 、SQL Server、MySQL、PostgreSQL数据库优缺点分析

    对Oracle .SQL Server.MySQL.PostgreSQL数据库优缺点分析 Oracle Database Oracle Database,又名Oracle RDBMS,或简称Oracl ...

  8. Oracle 分区表-Range分区

    原文:http://www.tuicool.com/articles/MzeM7r 一.什么是分区表 Oracle提供了分区技术以支持VLDB(Very Large DataBase).分区表通过对分 ...

  9. Oracle实践--PL/SQL表分区的基础

    PL/SQL基础入门之表分区 PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言.是对SQL的扩展.支 ...

随机推荐

  1. storm从入门到放弃(二),任务分配过程-核心机密

    背景:目前就职于国内最大的IT咨询公司,恰巧又是毕业季,所在部门招了100多个应届毕业生,本人要跟部门新人进行为期一个月的大数据入职培训,特此将整理的文档分享出来. 原文和作者一起讨论:http:// ...

  2. CRM权限管理

    CRM权限管理 一.概念 权限管理就是管理用户对于资源的操作.本 CRM 系统的权限(也称作资源)是基于角色操作权限来实现的,即RBAC(Role-Based Access Control,基于角色的 ...

  3. zabbix前台jsrpc注入

    zabbix是一个开源的企业级性能监控解决方案. 官方网站:http://www.zabbix.com zabbix的jsrpc的profileIdx2参数存在insert方式的SQL注入漏洞,攻击者 ...

  4. Tp3.2提交表单与操作表单

    笔记笔记 先去建个表———— 然后把我输入的东西 存到表里: <input type="submit" id="tijiao" value="提 ...

  5. [算法题] Add Two Numbers

    题目内容 题目来源:LeetCode You are given two non-empty linked lists representing two non-negative integers. ...

  6. Unity3D --对撞机/碰撞器 介绍

    碰撞器一般都用作触发器而用,刚体一般用作真实碰撞. 静态对撞机:一个对象有对撞机组件,没有刚体组件. 这种情况在场景中的静态物体应用较多,比如墙体,房屋等静止不动的物体. 物理引擎假设静态对撞机是不会 ...

  7. 有返回值的函数,如果包含try/catch块,经常会出现没有return的错误

    public static Connection getConnection(){ try { return datasource.getConnection(); } catch (SQLExcep ...

  8. 理解最基本的Vue项目

    上一篇<Vue开发环境搭建及热更新>,我们讲解了vue开发环境的搭建还有一些小问题,接下来我们来讲解一下这个界面是如何形成的. 在开始讲之前,我们先来看看我们上一篇所谓的项目目录里面到底放 ...

  9. Selenium1 Selenium2 WebDriver

    1.Selenium 1 原理 (1).测试用例(Testcase)通过Client Lib的接口向Selenium Server发送Http请求,要求和Selenium Server建立连接. 为什 ...

  10. Nodejs 复制文件/文件夹

    1.使用fs复制文件 使用fs对象的readFileSync,writeFileSync方法进行读写操作复制 cp.js function copyIt(from, to) { fs.writeFil ...