概述
Oracle9i通过引入列表分区(List Partition),使得当前共有4种分区数据的方法,具体列出如下:
第一种 范围分区
1 对表进行单列的范围分区:
这使最为常用也是最简单的方法,具体例子如下:
create table emp
(empno number(4),
ename varchar2(30),
sal number)
partition by range(empno)
(partition e1 s less than (1000) tablespace emp1,
partition e2 s less than (2000) tablespace emp2,
partition e3 s less than (max) tablespace emp3);
insert into emp s (100,Tom,1000);
insert into emp s (500,Peter,2000);
insert into emp s (1000,Scott,3000);
insert into emp s (1999,Bill,4000);
insert into emp s (5000,Gates,6000);
commit;
从emp表中选择全部的纪录如下:
SQL> select * from emp;
EMPNO ENAME SAL
---------- ------------------------------ ----------
100 Tom 1000
500 Peter 2000
1000 Scott 3000
1999 Bill 4000
5000 Gates 6000
还可以按照分区进行选择:
SQL> select * from emp partition (e1);
EMPNO ENAME SAL
---------- ------------------------------ ----------
100 Tom 1000
500 Peter 2000
SQL> select * from emp partition (e2)
EMPNO ENAME SAL
---------- ------------------------------ ----------
1000 Scott 3000
1999 Bill 4000
SQL> select * from emp partition (e3)
EMPNO ENAME SAL
---------- ------------------------------ ----------
5000 Gates 6000
使用了分区,还可以单独针对指定的分区进行truncate操作:
alter table emp truncate partition e2;
2 对表进行多列的范围分区:
多列的范围分区主要是基于表中多个列的值的范围对数据进行分区,例如:
drop table emp;
create table emp
(empno number(4),
ename varchar2(30),
sal number,
day integer not null,
month integer not null)
partition by range(month,day)
(partition e1 s less than (5,1) tablespace emp1,
partition e2 s less than (10,2) tablespace emp2,
partition e3 s less than (max,max) tablespace emp3);
SQL> insert into emp s (100,Tom,1000,10,6);
SQL> insert into emp s (200,Peter,2000,3,1);
SQL> insert into emp s (300,Jane,3000,23,11);
第二种 Hash分区:
hash分区最主要的机制是根据hash算法来计算具体某条纪录应该插入到哪个分区中
(问:hash算法是干什么的?呵呵,只能去看看数据结构了)
hash算法中最重要的是hash函数,Oracle中如果你要使用hash分区,只需指定分区的数量即可
建议分区的数量采用2的n次方,这样可以使得各个分区间数据分布更加均匀
具体例子如下:
drop table emp;
create table emp (
empno number(4),
ename varchar2(30),
sal number)
partition by hash (empno)
partitions 8
store in (emp1,emp2,emp3,emp4,emp5,emp6,emp7,emp8);
怎么样?很方便吧!
第三种 复合分区:
这是一种将前两种分区综合在一起使用的方法,例如:
drop table emp;
create table emp (
empno number(4),
ename varchar2(30),
hiredate date)
partition by range (hiredate)
subpartition by hash (empno)
subpartitions 2
(partition e1 s less than (to_date(20020501,YYYYMMDD)),
partition e2 s less than (to_date(20021001,YYYYMMDD)),
partition e3 s less than (max));
上面的例子中将雇员表先按照雇佣时间hiredate进行了范围分区,然后再把每个分区分为两个子hash分区。例子中一共将产生6个分区。
第四种 列表分区:
这是Oracle 9i的新特性,有了这种分区使得我们可以方便的按照值来将数据分为更小的片断。
例如:
drop table emp;
create table emp (
empno number(4),
ename varchar2(30),
location varchar2(30))
partition by list (location)
(partition e1 s (北京),
partition e2 s (上海,天津,重庆),
partition e3 s (广东,福建));
这里说明一下,列表分区不能有max,当你试图insert列表中不存在的值的时候,Oracle会拒绝这条纪录(ORA-14400)。
怎么样?看出列表分区很有用了吧?这么方便的东东居然是Oracle9i的New Feature,分特!
上面列出了Oracle9i中使用分区的四种方法,其中的例子很简单,真正工作中具体使用那种分区方法要参考你的具体需求。
注:例子中使用的e1,e2,e3,e4等是分区名称,emp1,emp2,emp3,emp4等是表空间名称。
ps:hash分区最主要的机制是根据hash算法来计算具体某条纪录应该插入到哪个分区中,hash算法中最重要的是hash函数,Oracle中如果你要使用hash分区,只需指定分区的数量即可。建议分区的数量采用2的n次方,这样可以使得各个分区间数据分布更加均匀。
第一种 范围分区
1 对表进行单列的范围分区:
这使最为常用也是最简单的方法,具体例子如下:
create table emp
(empno number(4),
ename varchar2(30),
sal number)
partition by range(empno)
(partition e1 s less than (1000) tablespace emp1,
partition e2 s less than (2000) tablespace emp2,
partition e3 s less than (max) tablespace emp3);
insert into emp s (100,Tom,1000);
insert into emp s (500,Peter,2000);
insert into emp s (1000,Scott,3000);
insert into emp s (1999,Bill,4000);
insert into emp s (5000,Gates,6000);
commit;
从emp表中选择全部的纪录如下:
SQL> select * from emp;
EMPNO ENAME SAL
---------- ------------------------------ ----------
100 Tom 1000
500 Peter 2000
1000 Scott 3000
1999 Bill 4000
5000 Gates 6000
还可以按照分区进行选择:
SQL> select * from emp partition (e1);
EMPNO ENAME SAL
---------- ------------------------------ ----------
100 Tom 1000
500 Peter 2000
SQL> select * from emp partition (e2)
EMPNO ENAME SAL
---------- ------------------------------ ----------
1000 Scott 3000
1999 Bill 4000
SQL> select * from emp partition (e3)
EMPNO ENAME SAL
---------- ------------------------------ ----------
5000 Gates 6000
使用了分区,还可以单独针对指定的分区进行truncate操作:
alter table emp truncate partition e2;
2 对表进行多列的范围分区:
多列的范围分区主要是基于表中多个列的值的范围对数据进行分区,例如:
drop table emp;
create table emp
(empno number(4),
ename varchar2(30),
sal number,
day integer not null,
month integer not null)
partition by range(month,day)
(partition e1 s less than (5,1) tablespace emp1,
partition e2 s less than (10,2) tablespace emp2,
partition e3 s less than (max,max) tablespace emp3);
SQL> insert into emp s (100,Tom,1000,10,6);
SQL> insert into emp s (200,Peter,2000,3,1);
SQL> insert into emp s (300,Jane,3000,23,11);
第二种 Hash分区:
hash分区最主要的机制是根据hash算法来计算具体某条纪录应该插入到哪个分区中
(问:hash算法是干什么的?呵呵,只能去看看数据结构了)
hash算法中最重要的是hash函数,Oracle中如果你要使用hash分区,只需指定分区的数量即可
建议分区的数量采用2的n次方,这样可以使得各个分区间数据分布更加均匀
具体例子如下:
drop table emp;
create table emp (
empno number(4),
ename varchar2(30),
sal number)
partition by hash (empno)
partitions 8
store in (emp1,emp2,emp3,emp4,emp5,emp6,emp7,emp8);
怎么样?很方便吧!
第三种 复合分区:
这是一种将前两种分区综合在一起使用的方法,例如:
drop table emp;
create table emp (
empno number(4),
ename varchar2(30),
hiredate date)
partition by range (hiredate)
subpartition by hash (empno)
subpartitions 2
(partition e1 s less than (to_date(20020501,YYYYMMDD)),
partition e2 s less than (to_date(20021001,YYYYMMDD)),
partition e3 s less than (max));
上面的例子中将雇员表先按照雇佣时间hiredate进行了范围分区,然后再把每个分区分为两个子hash分区。例子中一共将产生6个分区。
第四种 列表分区:
这是Oracle 9i的新特性,有了这种分区使得我们可以方便的按照值来将数据分为更小的片断。
例如:
drop table emp;
create table emp (
empno number(4),
ename varchar2(30),
location varchar2(30))
partition by list (location)
(partition e1 s (北京),
partition e2 s (上海,天津,重庆),
partition e3 s (广东,福建));
这里说明一下,列表分区不能有max,当你试图insert列表中不存在的值的时候,Oracle会拒绝这条纪录(ORA-14400)。
怎么样?看出列表分区很有用了吧?这么方便的东东居然是Oracle9i的New Feature,分特!
上面列出了Oracle9i中使用分区的四种方法,其中的例子很简单,真正工作中具体使用那种分区方法要参考你的具体需求。
注:例子中使用的e1,e2,e3,e4等是分区名称,emp1,emp2,emp3,emp4等是表空间名称。
ps:hash分区最主要的机制是根据hash算法来计算具体某条纪录应该插入到哪个分区中,hash算法中最重要的是hash函数,Oracle中如果你要使用hash分区,只需指定分区的数量即可。建议分区的数量采用2的n次方,这样可以使得各个分区间数据分布更加均匀。
最后
以上就是老迟到马里奥为你收集整理的ORACLE数据库中PARTITION的用法的全部内容,希望文章能够帮你解决ORACLE数据库中PARTITION的用法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复