详见: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. Linux(9)后台运行python程序并输出到日志文件

    后台运行python程序并标准输出到文件 现在有test.py程序要后台部署, 里面有输出内容 使用命令: nohup python -u test.py > test.log 2>&am ...

  2. [补档]Password

    Password 题目 Rivest是密码学专家.近日他正在研究一种数列E = {E[1],E[2],--,E[n]},且E[1] = E[2] = p(p为一个质数),E[i] = E[i-2]×E ...

  3. 【.net 深呼吸】导出 Office 文档中的图片

    我们常用的 Office 文档其实就三种——Word.Excel.PowerPoint,分别对应的扩展名为:.docx..pptx..xlsx. 许多教程都告诉我们,要提取这些文件中的图片(其实像视频 ...

  4. Zabbix监控nginx性能

    编辑nginx的配置文件nging #配置ngx_status location /nginx_status{ stub_status on; access_log off; } #重启nginx # ...

  5. [STL] day 1~2 Problem Set

    Q#1 #include <cmath> #include <cstdio> #include <vector> #include <iostream> ...

  6. js存款计算器原生小demo

    大家好,本人是初入前端的一枚程序猿,深知js底层开发的重要性,这也是我的软肋所在(曾经以为),渐渐的明白了一个道理,饭要一口口吃,路要一步步走,这也是我想告诉给所有刚刚进入IT行业的技术员们,沉下心, ...

  7. 蓝桥杯算法训练_2的次幂表示+前缀表达式+Anagrams问题+出现次数最多的整数

    今天做了4个简单的题,题目虽然是简单,但是对于我这样的小白,还是有很多东西需要学习的. 2的次幂表示 上面就是题目,题目说的也很清晰了,接下来就是递归的实现: #include<iostream ...

  8. Vue.js安装

    环境 操作系统:window7 虚拟机:centos7 vue.js: 2.8 安装nodejs 参考我得文章: http://blog.csdn.net/u013066244/article/det ...

  9. python基础===使用switch方法,减少使用if语句

    def jia(x,y): return x+y def jian(x,y): return x-y def cheng(x,y): return x*y def chu(x,y): return x ...

  10. CSSc常用样式

          一.CSS常用文本属性 1.css中的颜色表示方式   1.1直接使用颜色的单词表示:red.green.blue     1.2使用颜色的十六进制表示:#ff0000,#00ff00: ...