`

oracle表分区

 
阅读更多

一、表分区与分区表的区别  

      表分区只是一种思想,分区表是一种技术实现。

    当表的大小过G的时候可以考虑进行表分区,提高查询效率,均衡IO。oracle分区表是oracle数据库提供的一种表分区的实现形式。表进行分区后,逻辑上仍然是一张表,原来的查询SQL同样生效,同时可以采用使用分区查询来优化SQL查询效率,不至于每次都扫描整个表。关于oracle中分区表的查询及删除操作查看http://programmerwind.iteye.com/admin/blogs/2077923

二、分区表的分类       

Oracle分区表分为四类:范围分区表;列表分区表;哈希分区表;组合分区表

 

范围分区表(常用)

创建一个按字段数据范围分区的表,分区置于指定的不同表空间中

 

示例代码:

--为各个分区准备独立的表空间(指定不同的表空间,放在不同的磁盘上可以提高查询的效率。放在同一块磁盘上的影响不大,不建议使用默认表空间)

create tablespace test_space01 datafile‘d:/tbs01.dbf’ size 50m

create tablespace test_space02 datafile‘d:/tbs02.dbf’ size 50m

create tablespace test_space03 datafile‘d:/tbs03.dbf’ size 50m

create tablespace test_space04 datafile‘d:/tbs04.dbf’ size 50m

 可扩展表空间的建法:

 

create tablespace 表空间名 datafile '路径' size 5G autoextend on next 1G maxsize unlimited; 

--创建分区表,

CREATE TABLE range_example(

    range_key_column DATE,

    DATA VARCHAR2(20),

    ID integer

)

PARTITION BY RANGE(range_key_column)

(  

PARTITION part01 VALUES LESS THAN(TO_DATE('2008-07-01 00:00:00','yyyy-mm-dd hh24:mi:ss')) TABLESPACEtest_space01,

PARTITION part02 VALUES LESS THAN(TO_DATE('2008-08-01 00:00:00','yyyy-mm-dd hh24:mi:ss')) TABLESPACE test_space02,

PARTITION part03 VALUES LESS THAN(TO_DATE('2008-09-01 00:00:00','yyyy-mm-dd hh24:mi:ss')) TABLESPACE test_space03,

PARTITION part04 VALUES LESS THAN (MAXVALUE)TABLESPACE test_space04

);

--在表上执行查询

select * from range_example;

 

 

--在表分区上执行查询

select * from range_example partition(part01);

列表分区表

创建一个按字段数据列表固定可枚举值分区的表。插入记录分区字段的值必须在列表中,否则不能被插入。

示例代码:

CREATE TABLE list_example(

dnameVARCHAR2(10),

DATA VARCHAR2(20)

)

PARTITION BY LIST(dname)

(

PARTITION part01VALUES('初始登记','转移登记'),

PARTITION part02 VALUES('更名登记','楼盘变更'),

PARTITION part03 VALUES('抵押登记'),

PARTITION part03 VALUES('限制登记')

);

哈希分区表

创建一个按字段数据Hash值分区的表

示例代码:

CREATE TABLE hash_example(

     hash_key_column DATE,

     DATA VARCHAR2(20)

)

PARTITION BY HASH(hash_key_cloumn)

(

    PARTITION part01,

    PARTITION part02

);

组合分区表

在分区中可以再建立子分区,以实现分区组合。可任意对上述各类分区进行组合分区。

此例中创建了一个由范围分区和哈希分区组合实现分区的表。

示例代码:

CREATE TABLE range_hash_example(

 range_column_key int,

 hash_column_key INT,

 DATAVARCHAR2(20)

)

PARTITION BY RANGE(range_column_key)

SUBPARTITION BY HASH(hash_column_key)SUBPARTITIONS 2

(

PARTITION part_1 VALUES LESS THAN (100000000)

(

   SUBPARTITION part_1_sub_1,

   SUBPARTITION part_1_sub_2,

   SUBPARTITION part_1_sub_3

    ),

PARTITION part_2 VALUES LESS THAN (200000000)

(

     SUBPARTITION part_2_sub_1,

   SUBPARTITION part_2_sub_2

)

);

--注 subpartitions 2 并不是指定subpartition的个数一定为2,实际上每个分区的子分区个数可以不同。如果不指定subpartition的具体明细,则系统按照subpartitions的值指定subpartition的个数生成子分区,名称由系统定义 。

 

 

三、关于分区表和索引

在分区表上可以建立三种类型的索引:1和普通表一样的全局索引;2.全局分区索引;3.本地分区索引。

它们之间的区别如下图示:

 

 

以表range_example为例。

1.建立普通的索引

create index com_index_range_example_id onrange_example(id);

 

2.建立本地分区索引

create index  local_index_range_example_id onrange_example(id) local;

 

3.建立全局分区索引

create index gidx_range_exampel_id onrange_example(id)

GLOBAL partition by  range(id)

(

 part_01 values less than(1000),

 part_02 values less than(MAXVALUE)

);

 

对于分区索引的删除,local index 不能指定分区名称,单独的删除分区索引。

local index 对应的分区会伴随着data分区的删除而一起被删除。globalpartition index 可以指定分区名称,删除某一分区。但是有一点要注意,如果该分区不为空,则会导致更高一级的索引分区被置为UNUSABLE 。

 ALTER INDEX gidx_range_exampel_id drop partition part_01 ; 此句将导致part_02 状态为UNUSABLE

分享到:
评论

相关推荐

    oracle表分区详解

    oracle表分区详解

    oracle表分区详细讲解

    oracle表分区,详细的讲解了oracle3种分区的方法和使用,例子也很多,对于想了解或学习表分区的道友,此文档必备

    Oracle表分区详解(优缺点)

    Oracle 表分区技术详解: 1.表空间及分区表的概念 2.表分区的具体作用 3.表分区的优缺点 4.表分区的几种类型及操作方法 5.对表分区的维护性操作.

    oracle表分区实例

    oracle表分区实例.doc oracle表分区实例.doc oracle表分区实例.doc

    Oracle表分区 建表空间 创建用户

    Oracle的相关知识,建表空间,创建用户,给用户授权, 删除用户,给表多列加锁,导出和导入,范围分区,散列分区,列表分区,复合分区、、、

    oracle表分区总结

    oracle表分区

    Oracle表分区和索引分区

    Oracle表分区和索引分区 分区概述 为了简化数据库大表的管理,例如在数据仓库中一般都是TB级的数量级.ORACLE8以后推出了分区选项.分区将表分离在若于不同的表空间上,用分而治之的方法来支撑元限膨胀的大表,组...

    oracle表分区实践

    分区表对于提高大表的访问性能会有很大的帮助

    oracle 表分区

    但是,从应用程序的角度来看,分区后的表与非分区表完全相同,使用 SQL DML 命令访问分区后的表时,无需任何修改。(对于高效率查询是有影响,主要差别是对某一分区数据时行查询时和对整体数据进行查询)

    Oracle表分区总结

    Oracle表分区总结 Oracle中提供了对表进行分区的机制,通过表分区,可以将表空间中数据按照某种方式分别存放到特定的分区中。

    ORACLE表分区分区概述

    ORACLE表分区分区概述 为了简化数据库大表的管理,例如在数据仓库中一般都是TB级的数量级.ORACLE8以后推出了分区选项.分区将表分离在若于不同的表空间上,用分而治之的方法来支撑元限膨胀的大表,组大表在物理一级的...

    Oracle表分区

    Oracle表分区分为四种:范围分区,散列分区,列表分区和复合分区。 一:范围分区 就是根据数据库表中某一字段的值的范围来划分分区,例如: Sql代码 create table graderecord ( sno varchar2(10), sname...

    oracle表分区知识

    Oracle表分区的类型 1) 范围分区实例 2) 哈希分区实例 3) 列表分区实例 4) 复合分区实例 Oracle表分区对应用系统程序开发的影响和优化策略

    Oracle表分区详解

    NULL 博文链接:https://flyshark.iteye.com/blog/1166724

    oracle表分区详解.pdf

    1、oracle表分区详解;2、表分区的具体作用;3、表分区的优缺点;4、表分区的几种类型及操作方法;5、有关表分区的一些维护性操作

    Oracle表分区技术总结.doc

    Oracle表分区技术总结.doc

    福州采集项目_Oracle表分区实践.zip

    oracle表分区

    oracle表分区.[归类].pdf

    oracle表分区.[归类].pdf

Global site tag (gtag.js) - Google Analytics