详见: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. 原生JS元素怎么取消事件

    关于原生JS元素怎么取消事件,有3种方式 常规方法:removeEventListener 案例: <body> <div id="myDIV"> div ...

  2. python教程6-2:字符串标识符

    标识符合法性检查. 1.字母或者下划线开始. 2.后面是字母.下划线或者数字. 3.检查长度大于等于1. 4.可以识别关键字. python35 idcheck.py  idcheck.py impo ...

  3. 有关cxf与安卓客户端或者C客户端的中文乱码问题

    前段时间在与C的客户端和安卓的客户端进行联调,首先我的方法接收的是C客户端所传递的数据,但是传递到方法内的中文就变成了乱码(我的方法的编码是utf8),最后通过String a = new Strin ...

  4. easyui项目问题集锦

    1.级联问题(combobox) combobox至多可以保存2个东西value和text,但我需要第三个数的时候,怎么办?比如,省.市.区的三级级联,我选择市的时候,需要市id,市name,区号,邮 ...

  5. UITabbarController左右滑动切换标签页

    UITabbarController左右滑动切换标签页 每个Tabbar ViewController都要添加如下代码,建议在基类中添加:ViewDidLoadUISwipeGestureRecogn ...

  6. The ways to kill Oracle session

    As we all known ,its the normal way  to use the SQL  'alter system kill 'sid,serial#'' to kill a ses ...

  7. 从入门到放弃,.net构建博客系统(一):系统构建篇

    demo:http://tonyblogs.top/ Git源码:https://github.com/Halifa/TonyBlogs 项目采用的技术有:asp.net mvc4 + autofac ...

  8. mysql中varchar和char区别(思维导图整理)

    由于mysql一直是我的弱项(其实各方面我都是很弱的),所以最近在看msyql,正好看到varchar和char区别,所以整理一下,便于以后遗忘. 0.0图片已经说明一切,但是系统说我字数不够,我真能 ...

  9. ASP.NET Core - 关于标签帮助器您值得了解的五点

    如果您开发过ASP.NET Core Web应用程序,您应该已经熟悉了标签帮助器.ASP.NET Core应用程序依赖标签帮助器来呈现表单和表单字段是很常见的.所以,一个视图通常包含许多标签帮助器以及 ...

  10. Canvas 旋转风车绘制

    写在前面:   亲爱的朋友们大家好,鄙人自学前端,第一次写博客,写的不好的地方,烦请同学们谅解,如果本文对你有一丁点帮助,还请劳驾您给我点个赞,您的认可将是我坚持下去的强大动力!谢谢! 在进行教学之前 ...