(4)
当预计一个表的会达到千万级别甚至更高,选用分区表是个必须考虑的设计思路。
分区表可以理解为逻辑上一个表,物理上多个表的。通常为了提高性能,将不同的分区创建到不同的表空间(不同的表空间又可以再创建到不同的磁盘设备上,每个磁盘设备都拥有独立的IO读写磁头 ,这样能实现同时并发读写数据,提高并发性能的效果)
Oracle数据库通常提供对表的分区方法有三种:
1、范围分区
2、Hash分区(散列分区)
3、复合分区
示例:先建三个表空间。
create tablespace tb_mb01
datafile '/home1/oracle/oradata/member01.dbf' size 500M
create tablespace tb_mb02
datafile '/home1/oracle/oradata/member02.dbf' size 500M
create tablespace tb_mb03
datafile '/home1/oracle/oradata/member03.dbf' size 500M
a)、范围分区
根据会员ID分区建表:
create tablememberBase
(
memberIDnumber(10) primary key,
memberLoginName varchar2(40) not null,
memberLoginPwd char(32) not null,
…
)
partitionby range (memberID)
(
partition part_01 values less than(5000000) tablespace tb_mb01,
partition part_02 values less than(10000000) tablespace tb_mb02,
partition part_03 values less than(maxvalue) tablespace tb_mb03
);
根据会员的memberID,500万以下的记录分配在第一个分区中,存放在tb_mb01表空间中,在500万到1千万之间的记录在第二个分区中,存放在tb_mb02表空间中,超过1000万的分配到第三个分区,存放在tb_mb03表空间中。
当然也可以根据需求,使用两个字段的范围分布来分区,如地区+性别。
Insert数据时,与使用普通表一样,
insert intomemberBase
(memberID,memberLoginName,memberLoginPwd,…)
values(seq_memberID.nextVal,’zhangsan’,’加密算法后得到的密文’,...);
查询分区表记录,可指定查询某个分区,也可以不指定,当不指定分区是,若查询的条件是分区表创建的分区字段,如memberID,则系统会自动从对应的分区检索数据,若不是分区字段,则系统将不会按分区表原则策略来检索数据:
select * from memberBase partition(part_01);
select * from memberBase partition(part_02);
select * from memberBase t partition(part_03);
select * from memberBase t;