分区表简单介绍

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);
 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值