详见: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. Ubuntu超好用软件:剪贴板

    这个软件的作用就是保存你复制或者剪贴的内容 对于经常复制文字的Ubuntu使用者作用还是比较大的 下面附上安装代码 安装: sudo add-apt-repository ppa:shantzu/cl ...

  2. 中国象棋(IOS)

    ////  ViewController.m//  ChineseChess////  Created by 晚起的蚂蚁 on 2016/11/20.//  Copyright © 2016年 晚起的 ...

  3. 关于SQL语句条件值写中文查不到的问题

    在使用jdbc链接MySQL执行SQL语句的时候,sql语句中的where条件,参数值带中文,则查询不到结果,而where条件,参数值都为数字或字母时可以正常查询, 原因是mysql的characte ...

  4. PHP基础与JS操作的区别

    嵌入页面方式 JS嵌入方式:<script></script> PHP嵌入方式:<?php ?>(常用) 输出语法 Javascript输出 1.alert(&qu ...

  5. Go 程序的性能优化及 pprof 的使用

    Go 程序的性能优化及 pprof 的使用 程序的性能优化无非就是对程序占用资源的优化.对于服务器而言,最重要的两项资源莫过于 CPU 和内存.性能优化,就是在对于不影响程序数据处理能力的情况下,我们 ...

  6. 编译器报错:'IHTMLControlElement' : redefinition

    由于我安装了platform SDK,编译导致错误: error C2367: 'IHTMLControlElement' : redefinition; different uuid specifi ...

  7. Oracle12c 在windonServer2012中安装的步骤

    oracle12c在windownServer2012中安装步骤  前期工作:<这个必须要安装:而且c$的C必须大写> 第一步:控制面板>所有控制面板项>管理工具>服务& ...

  8. electron + vue 实践项目

    github地址 本地安装环境准备 安装node: * https://nodejs.org/en/download/ 配置webpack: npm install -g webpack(sudo权限 ...

  9. noip普及组2004 不高兴的津津

    描述 津津上初中了.妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班.另外每周妈妈还会送她去学习朗诵.舞蹈和钢琴.但是津津如果一天上课超过八个小时就会不高兴,而且, ...

  10. js基础提高(二)

    JavaScript基础提高(二) 上篇写的是JavaScript的历史.基本的数据类型和基本的语法进填的话讲的就深入一些了. js的函数 1.js函数定义的方式 (1)普通方式 语法:functio ...