您的位置:首页 > 其它

分区表简单介绍

2015-08-15 10:21 141 查看
1分区概述

所谓分区就将一个巨型索引或巨型索引分成若干个独立的组成部分进行存储管理

每个相对小的,可以独立管理的部分,称为原理表或索引的分区。

2分区特点

提高数据库可管理性

提高数据库可用性

简化数据库维护

改善查询性能

提高数据库并行性

透明性

3何时需要分区

如果一个表大小超过2g 应该对表进行分区

如果要对一个表进行并行dml操作时 必须对表进行分区

4基本分区方法

范围分区

范围分区是根据分区列的值的范围对表进行分区,

每条记录根据其分区列值所在范围决定存储在那个分区中

范围分区是最常用的分区方法,特别适合根据日期进行分区情况,

在范围分区中使用VALUES LESS THAN 子句设定分区保存的记录的分区列值的上界

其中第一个分区没有下界,最后一个分区可以使用常量maxvalue 代表分区列值的最大值



例一

创建一个分区表 将销售信息根据季度不同进行分区 将2012年第一季度的销售信息保存在tbs1表空间中

将2012年第二季度的销售信息保存在tbs2表空间中 将2012年第三季度的销售信息保存在tbs3表空间中

将2012年第四季度的销售信息保存在tbs4表空间中

--创建四个表空间

create tablespace tbs1 size 5m datafile 'D:\ora\oradata\orcl\tbs1.dbf';

--创建分区表

create table sals_by_range(

prod_id number(6),

cust_id number,

time_id date,

channel_id char(1),

promo_id number(6),

quantity_slod number(3),

amount_sold number(10,2)

)

partition by range (time_id)

(

partition sales_q1_2012 values less than

( to_date('1-4-2012','dd-mm-yyyy')) tablespace tbs1,

partition sales_q2_2012 values less than

( to_date('1-7-2012','dd-mm-yyyy')) tablespace tbs2,

partition sales_q3_2012 values less than

( to_date('1-10-2012','dd-mm-yyyy')) tablespace tbs3,

partition sales_q4_2012 values less than

( to_date('1-1-2013','dd-mm-yyyy')) tablespace tbs4

);

建立分区表后 可以修改分区表各个分区所在表空间的状态 可以实现表分区不同操作

可以将表的部分分区设为脱机状态或只读状态,但不影响其他分区使用

alter tablespace tbs1 offline;

insert into sals_by_range(prod_id,cust_id,time_id)

values(1,10,to_date('2012-2-1','yyyy-mm-dd'));

insert into sals_by_range(prod_id,cust_id,time_id)

values(2,20,to_date('2012-5-1','yyyy-mm-dd'));

insert into sals_by_range(prod_id,cust_id,time_id)

values(2,20,to_date('2012-5-1','yyyy-mm-dd'));

insert into sals_by_range(prod_id,cust_id,time_id)

values(3,30,to_date('2012-8-1','yyyy-mm-dd'));

insert into sals_by_range(prod_id,cust_id,time_id)

values(4,40,to_date('2012-11-1','yyyy-mm-dd'));

select * from sals_by_range;

select * from sals_by_range where time_id>=to_date('2012-04-01','yyyy-mm-dd');

alter tablespace tbs1 online;

列表分区

如果分区列的值并不能划分范围 非数值类型和日期类型 同时分区列的取值是一个

包含少数值的集合 可以采用列表分区

将特定分区列值的记录保存到特定分区中



--创建一个采用列表分区的表 基于销售地点(江苏地区)

create table sales_by_list(

dptno number,

deptname varchar2(20),

quanterly_sales number(10,2),

state varchar2(20)

)

tablespace users

partition by list(state)

(

partition q1_sunan values('无锡','苏州','常州') tablespace tbs1,

partition q1_suzhong values('南京','镇江','扬州','泰州') tablespace tbs2,

partition q1_subei values('连云港','徐州','宿迁','淮安','盐城') tablespace tbs3

);

散列分区

散列分区 又称hash分区 采用基于列值的hash算法 将数据均匀分布到指定分区

一个记录到底分布在那个分区中是由hash函数决定的

在进行范围分区和列表分区时无法对各个分区中可能具有记录数量进行预测

可能导致数据在各个分区分布不平衡



创建散列分区 设置分区名称及其对应的表空间

create table dept_by_hash(

deptno number,

deptname varchar2(32)

)

storage(initial 10k)

partition by hash(deptno)

(

partition p1 tablespace tbs1,

partition p2 tablespace tbs2,

partition p3 tablespace tbs3

);

创建散列分区 通过分区数量设置分区

create table dept_by_hash_num(

deptno number,

deptname varchar2(32)

)

storage(initial 10k)

partition by hash(deptno)

partitions 3 store in(tbs1,tbs2,tbs3);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: