一、表分区

  (一)表分区的分类

    1、范围分区(range)

    2、散列分区(hash)

    3、列表分区(list)

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

  (二)范围分区:

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

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

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

  (三)散列分区:

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

  例:

--创建表
CREATE TABLE drawlist(
draw_id NUMBER,
draw_name VARCHAR2(20)
)
--创建散列分区
PARTITION BY HASH(draw_name)
(
PARTITION p1 TABLESPACE USERS,
PARTITION p2 TABLESPACE USERS,
PARTITION p3 TABLESPACE USERS,
PARTITION p4 TABLESPACE USERS
); --生成1000行数据
--查询各个分区表中的数据。
SELECT COUNT(*) FROM drawlist PARTITION (p1);
SELECT COUNT(*) FROM drawlist PARTITION (p2);
SELECT COUNT(*) FROM drawlist PARTITION (p3);
SELECT COUNT(*) FROM drawlist PARTITION (p4);

  (四)列表分区:

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

CREATE TABLE area
(
CODE NUMBER,
NAME VARCHAR2(20)
)
--创建列表分区
PARTITION BY LIST(CODE)
(
PARTITION p1 VALUES(10,20,30), --指定当code值为10,20,30为第一分区
PARTITION p2 VALUES(40,50,60), --指定当code值为40,50,60为第二分区
PARTITION p_other VALUES(DEFAULT) --其他值为第三分区
) select * from area PARTITION (p1);
select * from area PARTITION (p2);
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(值)

  例如:  

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

  2、删除分区

  语法:

  ALTER TABLE 表名 DROP PARTITION 分区表名

  例:

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

  3、截断分区

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

  语法:

  ALTER TABLE 表名 TRUNCATE PARTITION 分区表名

   例:

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

  4、合并分区

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

  语法:

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

  例:

--将分区表p1合并到分区表p2
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. 使用MATLAB设计FIR滤波器

    1.      采用fir1函数设计,fir1函数可以设计低通.带通.高通.带阻等多种类型的具有严格线性相位特性的FIR滤波器.语法形式: b = fir1(n, wn) b = fir1(n, wn ...

  2. 在线接口文档工具——ShowDoc

    ShowDoc:https://www.showdoc.cc/ --待更.

  3. linux怎么把英文版火狐浏览器改成中文

    一.按alt打开菜单栏,点击help>about firefox查看自己的火狐浏览器版本 比如我的是52.4.0版本 二打开网址 http://ftp.mozilla.org/pub/firef ...

  4. Git中分支merge和rebase的适用场景及区别

    Git merge是用来合并两个分支的. git merge b      # 将b分支合并到当前分支 同样 git rebase b,也是把 b分支合并到当前分支 原理 如下: 假设你现在基于远程分 ...

  5. 北京Uber优步司机奖励政策(1月4日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  6. P2664 树上游戏

    P2664 树上游戏 https://www.luogu.org/problemnew/show/P2664 分析: 点分治. 首先关于答案的统计转化成计算每个颜色的贡献. 1.计算从根出发的路径的答 ...

  7. c++ 重载运算与类型转换

    1. 基础概念 重载的运算符是具有特殊名字的函数:(重载运算符函数,运算符函数.重载运算符) 依次包含返回类型,函数名(operator=),参数列表,函数体. 只有重载的函数调用运算符operato ...

  8. 海思NB-IOT的RA功能

    就带ReleaseAssistance标志的特殊发送指令,发送数据的时候会向网络侧请求立即释放RRC进入Idle态. 降低20秒50mA连接态的能量消耗.

  9. 「日常训练」School Marks(Codeforces Round 301 Div.2 B)

    题意与分析(CodeForces 540B) 题意大概是这样的,有一个考试鬼才能够随心所欲的控制自己的考试分数,但是有两个限制,第一总分不能超过一个数,不然就会被班里学生群嘲:第二分数的中位数(科目数 ...

  10. Jquery获取DOM绑定事件

    获取到当前正在执行的事件: $('#testDive').bind('click', function(event){alert('event: ' + event.type)}); 获取所有绑定事件 ...