一、表分区

  (一)表分区的分类

    1、范围分区(range)

    2、散列分区(hash)

    3、列表分区(list)

    4、复合分区:范围-哈希(range-hash)、范围-列表(range-list)

  (二)范围分区:

  范围分区是应用范围比较广的分区方式,它是以列的值得范围来作为分区的划分条件,将记录存放到列值所在的range分区中。

  例:按照时间创建表分区。

  1. --创建表时建立分区表
  2. CREATE TABLE drawlist(
  3. drawname VARCHAR2(20),
  4. drawtime DATE NOT NULL
  5. )
  6. PARTITION BY range(drawtime)( --创建表分区,以drawtime为分区范围
  7. PARTITION part_1 VALUES LESS THAN (to_date('2010-1-1','yyyy-mm-dd')), --定义2010-1-1以前的数据保存的分区,不包括2010-1-1
  8. PARTITION part_2 VALUES LESS THAN (to_date('2011-1-1','yyyy-mm-dd')), --定义2011-1-1以前的数据分区
  9. PARTITION part_3 VALUES LESS THAN (to_date('2012-1-1','yyyy-mm-dd')),
  10. PARTITION part_4 VALUES LESS THAN (maxvalue) --其他的值保存的分区
  11. )
  12.  
  13. --插入数据,系统会自动将数据保存到对应的分区表中。
  14. INSERT INTO drawlist
  15. SELECT 'aaa',to_date('2009-10-20','yyyy-mm-dd') FROM dual UNION
  16. SELECT 'bbb',to_date('2009-11-20','yyyy-mm-dd') FROM dual UNION
  17. SELECT 'ccc',to_date('2009-12-20','yyyy-mm-dd') FROM dual UNION
  18. SELECT 'ddd',to_date('2010-10-20','yyyy-mm-dd') FROM dual UNION
  19. SELECT 'eee',to_date('2010-10-20','yyyy-mm-dd') FROM dual UNION
  20. SELECT 'fff',to_date('2011-10-20','yyyy-mm-dd') FROM dual UNION
  21. SELECT 'ggg',to_date('2012-10-20','yyyy-mm-dd') FROM dual
  22.  
  23. --查询分区表
  24. SELECT * FROM drawlist PARTITION (part_1);
  25. SELECT * FROM drawlist PARTITION (part_2);
  26. SELECT * FROM drawlist PARTITION (part_3);
  27. SELECT * FROM drawlist PARTITION (part_4);

  (三)散列分区:

  对于那些无法有效的划分范围的表,可以使用hash分区。hash分区会将数据平均的分配到指定的几个分区表中,由于数据被平均分配到不同的分区,减少查询时对数据块的竞争,这样对于提高性能还是会有一些帮助,列所在的分区是一句分区列的hash值自动分配,因此不能控制,也不知道哪条记录被放到哪个分区中,hash分区也可以支持多个依赖咧。建立散列分区最好使用2的冥次个分区表。比如2,4,8,16等。

  例:

  1. --创建表
  2. CREATE TABLE drawlist(
  3. draw_id NUMBER,
  4. draw_name VARCHAR2(20)
  5. )
  6. --创建散列分区
  7. PARTITION BY HASH(draw_name)
  8. (
  9. PARTITION p1 TABLESPACE USERS,
  10. PARTITION p2 TABLESPACE USERS,
  11. PARTITION p3 TABLESPACE USERS,
  12. PARTITION p4 TABLESPACE USERS
  13. );
  14.  
  15. --生成1000行数据
  16. --查询各个分区表中的数据。
  17. SELECT COUNT(*) FROM drawlist PARTITION (p1);
  18. SELECT COUNT(*) FROM drawlist PARTITION (p2);
  19. SELECT COUNT(*) FROM drawlist PARTITION (p3);
  20. SELECT COUNT(*) FROM drawlist PARTITION (p4);

  (四)列表分区:

  列表分区也需要指定列的值,其分区必须明确指定,该分区列只能有一个,不能像range或hash分区那样同时指定多个列作为分区依赖列,但它的单个分区对应值可以是多个。使用列表分区,必须确定分区列可能存在的值,一旦插入的列值不在分区范围内,则插入/更新就会失败,因此通常建议使用list分区时,要创建一个default分区存储哪些不在指定范围内的记录,类似range分区中的maxvalue分区。  

  1. CREATE TABLE area
  2. (
  3. CODE NUMBER,
  4. NAME VARCHAR2(20)
  5. )
  6. --创建列表分区
  7. PARTITION BY LIST(CODE)
  8. (
  9. PARTITION p1 VALUES(10,20,30), --指定当code值为10,20,30为第一分区
  10. PARTITION p2 VALUES(40,50,60), --指定当code值为40,50,60为第二分区
  11. PARTITION p_other VALUES(DEFAULT) --其他值为第三分区
  12. )
  13.  
  14. select * from area PARTITION (p1);
  15. select * from area PARTITION (p2);
  16. select * from area PARTITION (p_other);

  

  (五)复合分区

  如果某表按照某列分区之后仍然较大,或者有一些其他的需求,还可以通过分区内再建子分区的方式将分区再分区,即组合分区的方式。

  组合分区分为:

  1、范围-哈希(range-hash)

  语法:

  PARTITION BY RANGE (列1) SUBPARTITION BY HASH(列2)(

    PARTITION 分区名 VALUES LESS THAN (值)

    TABLESPACE 表空间

  )

  

  2、范围-列表(range-list)

  语法:  

  PARTITION BY RANGE (列1) SUBPARTITION BY LIST(列2)(

    PARTITION 分区名 VALUES LESS THAN (值)

    TABLESPACE 表空间(

      SUBPARTITION 子分区名 VALUES(列表指定值...) TABLESPACE 表空间

    )

  )

二、分区维护

  1、增加分区

  语法:

  ALTER TBALE 表名 ADD PARTITION 分区表名 VALUES LESS THAN(值)

  例如:  

  1. --增加区间分区
  2. ALTER TABLE drawlist ADD PARTITION p3 VALUES LESS THEN to_date('2013-1-1','yyyy-mm-dd') TABLESPACE USERS;
  3. --注意:插入的区间数据值不能小于原有的分区表的值。如果包含了maxvalues,必须删除原有分区表

  2、删除分区

  语法:

  ALTER TABLE 表名 DROP PARTITION 分区表名

  例:

  1. --删除区间分区
  2. ALTER TABLE drawlist DROP PARTITION p3
  3. --删除分区表后,分区表中的数据也会一同删除

  3、截断分区

  删除当前分区中的数据,但是它并不会影响其他分区。

  语法:

  ALTER TABLE 表名 TRUNCATE PARTITION 分区表名

   例:

  1. --阶段分区表P3,清除分区表中的数据
  2. ALTER TABLE drawlist TRUNCATE PARTITION p3

  4、合并分区

  将两个分区表中的数据合并到一个分区,被合并的分区将不复存在。注意:高界线的分区不能合并到低界线的分区中。比如将小于2009年的数据合并到小于2010年的分区中,反过来则不行。

  语法:

  ALTER TABLE 表名 MERGE PARTITIONS 分区表1,分区表2 INTO  PARTITION 分区表2

  例:

  1. --将分区表p1合并到分区表p2
  2. ALTER TABLE drawlist MERGE PARTITIONS p1,p2 INTO PARTITION p2

Oracle基础 表分区的更多相关文章

  1. Oracle基础—表分区

    一:表分区的应用场景 用于管理包含大量数据的表. 二:表分区的优点 1.提高数据的可以性 2.减少管理负担 3.改善语句的性能 三:分区的方式:(区间分区.散列分区.列表分区.组合分区) 1.区间分区 ...

  2. Oracle数据库表分区

    一.Oracle数据库表分区概念和理解         1.1.已经存在的表没有方法可以直接转化为分区表.         1.2.不在分区字段上建立分区索引,在别的字段上建立索引相当于全局索引.效率 ...

  3. oracle的表分区

    (1.) 表空间及分区表的概念 表空间: 是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表, 所以称作表空间.   分区表: 当表中的数据量不断增大,查询数据的速度就 ...

  4. Oracle基础表空间建立,以及练习

    Oracle的表空间创建,可以采用网页的https://127.0.0.1:1158/em来进入oracle的页面进行创建表空间. 利用plsqldev.exe程序在表空间里添加数据: 首先要在use ...

  5. Oracle 删除表分区

    删除表分区(drop partition)    删除表分区包含两种操作,分别是:   Ø 删除分区:alter table [tbname] drop partition [ptname] UPDA ...

  6. oracle 基础表的选择

    基础表(Driving Table)是指被最先访问的表(通常以全表扫描的方式被访问). 根据优化器的不同, SQL语句中基础表的选择是不一样的. 如果你使用的是CBO (COST BASED OPTI ...

  7. oracle 添加表分区

    alter table DF_WRITE_FILES_H add partition DF_WRITE_FILES_H96 values less than (201512) tablespace T ...

  8. (3)Oracle基础--表

    · 认识表 Oracle中的表都是存储在表空间中,具有以下特点:  <1> 数据的基本存储单元  <2> 二维结构 行:又称为‘记录’ 列:又称为‘字段或域’  <3&g ...

  9. (2)Oracle基础--表空间

    · 表空间概述 <1> 理解表空间 ① 表空间与数据库的关系: 表空间是数据库的逻辑存储空间,可以理解为在数据库中开辟的一块空间,用于存放数据库的对象. 一个数据库可以由多个表空间构成.O ...

随机推荐

  1. APP支付 + 退款(JAVA实现)

    首先,你得先有微信开发平台账号密码还需要开通应用,然后还有微信服务商平台商户版账号(这些我都是给产品经理拿的) 其次我认为你先去看一看微信开发平台的文档!  https://pay.weixin.qq ...

  2. git配置config记住密码

    设置记住密码(默认15分钟): git config --global credential.helper cache如果想自己设置时间,可以这样做: git config credential.he ...

  3. java 中的线程池和线程 调用小demo

    public class Main { public static void main(String[] args) { try { /// ThreadPoolExecutor executor = ...

  4. iOS 中的正则表达式符号

    最近重新看了一遍 iOS 的正则文档,简单翻译下文档中涉及到的符号 1.正则表达式元字符 符号 说明 \a 响铃, \u0007 \A 匹配输入的开始,只匹配第一行,也就是忽略多行选项 \b 不在[] ...

  5. 转 Cobar使用文档(可用作MySQL大型集群解决方案)

    转自:http://blog.csdn.net/shagoo/article/details/8191346 最近好不容易抽空研究了下Cobar,感觉这个产品确实很不错(在文档方面比Amoeba强多了 ...

  6. 用CRF做命名实体识别(二)

    用CRF做命名实体识别(一) 用CRF做命名实体识别(三) 一. 摘要 本文是对上文用CRF做命名实体识别(一)做一次升级.多添加了5个特征(分别是词性,词语边界,人名,地名,组织名指示词),另外还修 ...

  7. (译)学习如何构建自动化、跨浏览器的JavaScript单元测试

    作者:Philip Walton 译者:Yeaseon 原文链接:点此查看 译文仅供个人学习,不用于任何形式商业目的,转载请注明原作者.文章来源.翻译作者及链接,版权归原文作者所有. ___ 我们都知 ...

  8. HTML <head>里面的标签

    <head> 中的标签可以引用脚本.指示浏览器在哪里找到样式表.提供元信息等等. 下面这些标签可用在 head 部分:<base>, <link>, <met ...

  9. Python 的非正式介绍

    在下面的例子中,通过提示符 (>>> 与 ...) 的出现与否来区分输入和输出:如果你想复现这些例子,当提示符出现后,你必须在提示符后键入例子中的每一个词:不以提示符开头的那些行是解 ...

  10. 微服务框架Dubbo与Springcloud的区别

    微服务框架Dubbo与Springcloud的区别 微服务主要的优势如下: 1.降低复杂度 将原来偶合在一起的复杂业务拆分为单个服务,规避了原本复杂度无止境的积累.每一个微服务专注于单一功能,并通过定 ...