ORACLE数据库入门再在屋里坐会 (13)

4)改善查询性能【检索自己需要的分区,提高检索速度】

4、分类 4.1)范围分区--最早,最经典,数据管理能力强,但分配不均匀

  范围分区就是对数据表中的某个值的范围进行分区,根据某个值的范围,决定将该数据存储在哪个分区上

这种分区方式是最为常用的,并且分区键经常采用日期,数值

1)语法:

create table 表名

(

      字段名1     类型 [约束],

      ...

      字段名n     类型 [约束]

)

表分区的定义

partition by range (column_name)

(

      partition part1 values less than (rang1) [tablespace tbs1],

     

      partition part2 values less than (rang2) [tablespace tbs2],

      ...

      partition partn values less than (maxvalue) [tablespace tbsn],

);

其中,

      column_name: 指定分区字段

      part1...partn:是表分区的名称

      rang1...maxvalue:表分区的边界值,其中maxvalue表示边界最大值,每个分区的边界值必须比下一个分区的边界值小

      tablespace:表空间(可选),指定表分区所在的表空间

      tbs1...tbsn:表分区所在的表空间

注意:只能在创建表时创建表分区(指定相关的表分区类型),而不能对现有的表(未创建表分区)创建表分区

2)例子:

eg1:根据某个值的范围来分区

create table part_andy1

(

      andy_id        number not null primary key,

      first_name  varchar2(30) not null,

      last_name   varchar2(30) not null,

      phone       varchar2(15) not null,

      email       varchar2(80),

      tatus       char(1)

)partition by range (andy_id)(

      partition part1 values less than (10000) ,

      partition part2 values less than (20000)

);

说明:

      andy_id字段的数值小于10000分配在part1分区,

      andy_id字段的数值大于等于10000且小于20000分配在part2分区,

      andy_id字段的数值大于等于20000将会出错,数据无法添加

eg2:根据日期分区

注意:如果是date类型的字段,则必须使用年份为4个字符的格式,需要使用to_date()函数指定分区边界

create table part_andy2

(

      order_id         number(7) not null,

      order_date       date,

      otal_amount       number,

      custotmer_id      number(7),

      paid                 char(1)

)partition by range (order_date)(

      partition p1 values less than (to_date('2014-10-1', 'yyyy-mm-dd')) ,

      partition p2 values less than (to_date('2015-10-1', 'yyyy-mm-dd')) ,

      partition p3 values less than (maxvalue)

);

说明:

      order_date在2014-10-1之前的,分配在p1分区,

      order_date大于或等于2014-10-1且小于2015-10-1的,分配在p2分区,

      order_date大于或等于2015-10-1,分配在p3分区

3)修改分区--分区界限必须调整为高于最后一个分区界限

alter table 表名

      add partition 表分区名称 values less than (值);

alter table part_andy1

      add partition part3 values less than (30000)

4)截断分区--分区中数据将全部删除,但分区依然存在

alter table 表名

      truncate partition 分区名;

alter table part_andy1

      truncate partition part2;

5)合并分区--将两个相邻分区合并成一个新分区,继承原分区中最高上限(可重用上界限名称,下界限不可以,也可以使用新的)

alter table 表名

merge partitions 分区名1,分区名2 into partition 新分区名或原上界限名称;    

  alter table part_andy1

  merge partitions part2,part3 into partition part3;      

6)拆分分区--将一个分区在指定的 value 值处一分为二,变成 2 个分区,原分区将不存在,数据将分到相应新的分区

alter table 表名

    split partition 原表分区 at (value) into (partition 拆分表分区1,partition 拆分表分区1);

查询part_andy1中,表分区part3的数据

  select * from part_andy1 partition(part3);

拆分分区   

alter table part_andy1

    split partition part3 at (20000) into (partition part31,partition part32);

查看

  select * from part_andy1 partition(part31);

  select * from part_andy1 partition(part32);

7)变更分区名--将分区名称改变

alter table 表名

      rename partition 原分区名 to 新分区

alter table part_andy1

      rename partition part31 to part31_new

8)删除分区

alter table 表名

      drop partition 分区名     

alter table part_andy1

      drop partition part31_new

4.2)散列分区--适合静态数据,总体性能最佳,易于实施,均匀

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyzwgw.html