平常开发中最经常使用的技术,主要针对于大数据量,频繁查询数据等需求oracle
oracle 提供了 7种分区,本文主要介绍较经常使用的几种less
区域分区,分区的时候必须在建立表时指定函数
语法:大数据
create table (...) partition by range (filed) (partition r1 values less than (value)); # value 为分区的依据,好比value=1000,即不超过1000的值都会存放在此分区, # 若是只有一个分区,那么大于1000的值便没法插入。能够指定value=maxvalue
查看分区状况:code
全部分区的状况,能够经过 where 条件判断索引
select * from user_table_partitions;
查看分区数据:ci
select * from table partition(r1);
修改分区:开发
addhash
alter table tablename add partition r2 values less than (maxvalue);
delit
alter table tablename drop partition r2;
跨分区操做
更新数据时不能够跨分区操做,好比更新以后的内容要从1分区移动到2分区,那么须要设置可移动的分区才能够跨分区查询,不然没法操做。
alter table tablename enable row movement;
分区索引
分区以后虽然提升了查询的效率,但仅仅是提升了数据的范围,依然须要创建分区索引,进一步提升效率。
local; 在每一个分区创建索引
语法: create index index_name on table(field) local;
查看: select * from user_ind_partitions;
索引的字段必定是分区的字段
global; 全局索引
一种是全局创建索引,这种方式分不分区都同样,不建议使用;
前缀索引
还有一种是自定义索引的区间的索引,即前缀索引
,这个是很是有意义的。
语法: 必须指定 maxvalue
create index index_name on table(field) global partition by range(filed) ( partition r1 values less than(value), partition r2 values less than(maxvalue) );
实现了均匀的负载值分配,增长 hash 分区能够从新分配数据
创建
create table table_name (empno number,ename varchar(20)) partition by hash(empno) (partition p1, partition p2)
查看分区结构
select * from user_tab_partitions where table_name= "table_name";
查看分区数据
select * from table_name partition(p1);
建立
create table table_name ( empno number, ename varchar(20), city varchar(20) partition by list(city) ( partition east values("shanghai“) ) )
建立
create table table_name( sno number, sname varchar(20) ) partition by range (sno) subpartition by hash (sname) # 子分区 subpartition 4 # 子分区分红4分 ( partition p1 values less than(1000), partition p2 values less than(maxvalue) )
是一种分区自动化的分区,能够指定时间间隔分区,一直是 oracle 引觉得荣的一项技术
语法:
create table table_name ( sid int, sdata timestamp ) partition by range(sdata) interval ( numtoyminterval(1, "MONTH") # 函数,计算月份 ) ( partition p1 values less than (TIMESTAMP'2019-02-01 00:00:00') )
至关于在 2014-02-01 以前的数据,创建一个分区;
以后的数据每隔一个月创建一个分区。