数据切分:
1、垂直:不同的表存放在不同的地方。
2、水平:按照规则将同一个表中的数据分开存放。
一、range分区(范围分区)
创建表的时候,可以按照规则把一个表分成几个部分,分开存放。
结构:
create table 表名(字段信息) --选定字段进行分区 partition by range(字段名)( --此区域为字段值小于上限1的数据 partition 分区名1 values less than(上限1), --此区域为字段值大于上限1,小于上限2的数据 partition 分区名2 values less than(上限2), --此区域为字段值大于上限2,小于上限3的数据 partition 分区名3 values less than(上限3), --此区域为字段值大于上限3的数据 partition 分区名4 values less than(maxvalue) ); --设置此表可以跨区进行数据更新,即数据更新后会自动移动所在分区,不设置则可能会因为规则而更新失败 alter table 表名 enable row movement;
例子:
--创建一个表,根据薪资分为几个区域储存 create table sales( pid number(10), salary number(10,2) )partition by range(salary)( --此区域为: 1000>salary 的数据 partition p1 values less than(1000), --此区域为: 3000>salary>1000 的数据 partition p2 values less than(3000), --此区域为: 5000>salary>3000 的数据 partition p3 values less than(5000), --此区域为: salary>5000的数据 partition p4 values less than(maxvalue) ); alter table sales enable row movement;
分区情况查看:
--借助数据词典查看所有表分区情况 select * from user_tab_partitions;
分区数据查看:
select * from 表名 partition(分区名);
新建:
alter table 表名 add partition 分区名 values less than(上限)
删除:
alter table 表名 drop partition 分区名
二、间隔分区(interval)
range的升级,它能够通过指定时间间隔,实现自动分区。
结构:
create table 表名 (字段信息) partition by range(字段名)
--分区规则:一个月一个区域 interval(numtoyminterval(1,'MONTH')) (
--第一个分区为指定日期之前的数据,此后的分区,按照规则自动创建 partition 分区名 values less than (TIMESTAMP'2014-02-01 00:00:00.00') )
其它分区:
散列分区:hash分区,把数据平均,分配到各个区域中。
列表分区:list分区,建立列表,进行相应的区域分配。
复合分区.....
三、分区索引
在数据进行分区后,可以建立与之对应的分区索引。
1、local,为每个分区建立对应索引。
创建:
create index 索引名 on 表名(字段名)local
2、global,灵活为指定区域创建索引。
创建:
create index 索引名 on 表名(字段名) global partition by range(字段名)( partition 分区名1 values less than(上限1) partition 分区名2 values less than(上限2) .... --必须要有maxvalue partition 分区名n values less than(maxvalue) )
创建全局索引:
create index 索引名 on 表名(字段名) global
查看分区索引:
--借助数据词典 select * from user_ind_partitions;
标签:less,--,分区,partition,索引,values,Oracle,than From: https://www.cnblogs.com/lurenjia-bky/p/17025752.html