连载:告诉你如何设计一个日访问量千万级别的系统,谈oracle的高级设计和开发(5)

来源:互联网 发布:哈尔斯保温杯知乎 编辑:程序博客网 时间:2024/05/18 01:44

继续分区表

Hash分区(散列分区)

    散列分区为通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O设备上进行散列分区,使得这些分区大小一致。如将物料交易表的数据根据交易ID散列地存放在指定的三个表空间中:

 

create table memberBase

    (

        memberIDnumber(10) primary key,

       memberLoginName varchar2(40) not null,

        memberLoginPwd char(32) not null,

        …

       )

    partitionby hash(memberID)

    (

      partition part_01 tablespace tb_mb01,

      partition part_02 tablespace tb_mb02,

      partition part_03 tablespace tb_mb03

   );

 

    建表成功,此时插入数据,系统将按memberID 将记录散列地插入三个分区中,这里也就是三个不同的表空间中。

 

 复合分区

 有时候我们需要根据范围分区后,每个分区内的数据再散列地分布在几个表空间中,这样我们就要使用复合分区。

复合分区是先使用范围分区,然后在每个分区内再使用散列分区的一种分区方法,如将物料交易的记录按时间分区,

然后每个分区中的数据分三个子分区,将数据散列地存储在三个指定的表空间中:

 

create table memberInfo

    (

        memberIDnumber(10) primary key,

        emailvarchar2 (60),

        telvarchar2(20),

        areaIDnumber(6)

    )

        partitionby range(areaID) subpartition by hash(memberID)

       subpartitions 3 store in (tb_mb01, tb_mb02, tb_mb03)

   (

      partition part_ 01 values less than(200000),

      partition part_02 values less than(400000),

      partition part_03 values less than(999999)

   );

 

    该例中,先是根据行政区进行范围分区,然后根据memberID将记录散列地存储在三个表空间中。

 

 更新分区表的记录:

   update memberInfopartition(part_01)

   set areaID= 310000

   where memberID= 2;

 

  或者

   update memberInfo

   set areaID= 310000

   where memberID= 2;

 

 

删除分区表记录:

delete from memberInfo partition(part_01) where memberID= 2;

 

delete from memberInfo where memberID = 2;

0 0
原创粉丝点击