在oracle11g之前,常用的分区表类型为范围分区,散列分区,列表分区,复合分区
1.范围分区
查看分区:

查看插入数据所在的分区:

2.列表分区
列表分区的特点就是某列的值只有几个
查看分区

查看数据所在的分区

3.散列分区
散列分区在列值上使用散列算法,以确定将行放在哪个分区中,当列值没有合适的条件时,使用散列分区
oracle中在建立散列分区时,一般只需要指定分区的数量即可,一般建议分区的数量为2的N次方,这样更有利于数据的负载均衡。
查看分区

查看各分区的数据

在Oracle11g及其以后,还有引用分区,间隔分区,基于虚拟列的分区,系统分区
引用分区
引用分区:基于由外键引用父表的分区方法,它依赖已有的父表子表的关系,子表通过外键关联到父表,进而继承父表的分区方式而不需自己创建。主表可以是范围,散列,列表分区。
分别查看这两个表的分区情况:

若没有显示的指定分区的名称,默认会继承父表分区的名称。
间隔分区
间隔分区它可以自动的根据阀值创建范围分区,我们只需指定范围分区的起点,后续Oracle会知道如何分区,它是范围分区的扩展。
一般我们在实际的项目中,范围分区一般是以月份。现在建立一个间隔分区,每一个月为一个分区。
现插入数据和查看分区情况



基于虚拟列的分区
把分区建立在某个虚拟列上,即建立在函数或表达式的计算结果上,来完成某种任务
系统分区
不指定分区列,由oracle来完成分区的控制和管理,它没有了范围分区或列表分区的界限
1.范围分区
点击(此处)折叠或打开
-
create table sale(
-
prod_id varchar2(12),
-
cust_id varchar2(12),
-
quantity number(10,2)
-
)
-
partition by range(quantity)
-
(
-
partition p_1 values less than(1000),--TABLESPACE tabspace 这里可以指定分区所在的表空间
-
partition p_2 values less than(2000),
-
partition p_3 values less than(3000)
-
);
-
-
insert into sale values(1,'A',100);
-
insert into sale values(2,'B',1100);
- insert into sale values(3,'C',2100);
-
commit;
点击(此处)折叠或打开
- SELECT table_name,partition_name,partition_position,high_value FROM user_tab_partitions;

查看插入数据所在的分区:
点击(此处)折叠或打开
-
select * from sale partition(p_1);
-
select * from sale partition(p_2);
- select * from sale partition(p_3);

2.列表分区
列表分区的特点就是某列的值只有几个
点击(此处)折叠或打开
-
create table product(
-
prod_id varchar2(12),
-
prod_name varchar2(32),
-
price number(16,6)
-
)
-
partition by list(prod_name)
-
(
-
partition p_1 values('phone'),
-
partition p_2 values('computer'),
-
partition p_3 values('car')
-
);
-
-
insert into product values(1,'phone',1000);
-
insert into product values(2,'computer',2000);
- insert into product values(3,'car',20000);
-
commit;
点击(此处)折叠或打开
-
SELECT table_name,partition_name,partition_position,high_value FROM user_tab_partitions
- WHERE table_name = 'PRODUCT'

查看数据所在的分区
点击(此处)折叠或打开
-
select * from product partition(p_1);
-
select * from product partition(p_2);
- select * from product partition(p_3);

3.散列分区
散列分区在列值上使用散列算法,以确定将行放在哪个分区中,当列值没有合适的条件时,使用散列分区
点击(此处)折叠或打开
-
CREATE TABLE student(
-
stu_id VARCHAR(12),
-
stu_name VARCHAR2(32),
-
stu_phone VARCHAR2(11)
-
)
-
PARTITION BY HASH(stu_phone) PARTITIONS 4
-
--store in (tabspace) 这个指定分区所存储的表空间
-
;
-
-
INSERT INTO student VALUES('101','A','13567891111');
-
INSERT INTO student VALUES('102','B','13587900110');
-
INSERT INTO student VALUES('103','C','13567891234');
-
INSERT INTO student VALUES('104','D','13523468901');
- commit;
查看分区
点击(此处)折叠或打开
-
SELECT table_name,partition_name,partition_position,high_value FROM user_tab_partitions
- WHERE table_name = 'STUDENT'

查看各分区的数据

在Oracle11g及其以后,还有引用分区,间隔分区,基于虚拟列的分区,系统分区
引用分区
引用分区:基于由外键引用父表的分区方法,它依赖已有的父表子表的关系,子表通过外键关联到父表,进而继承父表的分区方式而不需自己创建。主表可以是范围,散列,列表分区。
点击(此处)折叠或打开
-
create table product(
-
prod_id varchar2(12),
-
prod_name varchar2(32),
-
price number(16,6),
-
constraint pk_id primary key (prod_id)
-
)
-
partition by list(prod_id)
-
(
-
partition p_1 values('phone'),
-
partition p_2 values('computer'),
-
partition p_3 values('car')
-
-
);
-
-
create table sale(
-
prod_id varchar2(12) not null, --这里需要指定Not null约束,否则报错。是在oracle11.2.0.1.0
-
cust_id varchar2(12),
-
quantity number(10,2),
-
constraint fk_id foreign key(prod_id) references product(prod_id)
-
)
- partition by reference(fk_id);
点击(此处)折叠或打开
-
SELECT table_name,partition_name,partition_position,high_value FROM user_tab_partitions
- WHERE table_name IN ('PRODUCT','SALE')

若没有显示的指定分区的名称,默认会继承父表分区的名称。
间隔分区
间隔分区它可以自动的根据阀值创建范围分区,我们只需指定范围分区的起点,后续Oracle会知道如何分区,它是范围分区的扩展。
一般我们在实际的项目中,范围分区一般是以月份。现在建立一个间隔分区,每一个月为一个分区。
点击(此处)折叠或打开
-
create table sale(
-
statis_dt date,
-
sale_amount number(18,6),
-
prod_name varchar2(12)
-
)
-
partition by range(statis_dt)
-
interval(numtoyminterval(1,'MONTH'))
-
(
-
partition p_1 values less than(to_date('20160201','yyyymmdd'))
- );
点击(此处)折叠或打开
-
insert into sale values(to_date('20151231','yyyymmdd'),1000,'iphone7');
- commit;
点击(此处)折叠或打开
-
SELECT table_name,partition_name,partition_position,high_value FROM user_tab_partitions
- WHERE table_name IN ('SALE')

点击(此处)折叠或打开
-
insert into sale values(to_date('20160531','yyyymmdd'),1000,'iphone8');
- commit;
点击(此处)折叠或打开
-
SELECT table_name,partition_name,partition_position,high_value FROM user_tab_partitions
- WHERE table_name IN ('SALE')

点击(此处)折叠或打开
-
insert into sale values(to_date('20160430','yyyymmdd'),1000,'iphone7s');
- commit;
点击(此处)折叠或打开
-
SELECT table_name,partition_name,partition_position,high_value FROM user_tab_partitions
- WHERE table_name IN ('SALE')

基于虚拟列的分区
把分区建立在某个虚拟列上,即建立在函数或表达式的计算结果上,来完成某种任务
系统分区
不指定分区列,由oracle来完成分区的控制和管理,它没有了范围分区或列表分区的界限
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29782424/viewspace-2130011/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29782424/viewspace-2130011/
3632

被折叠的 条评论
为什么被折叠?



