(一)什么是分区
所谓分区,就是将一张巨型表或巨型索引分成若干个独立的组成部分进行存储和管理,每一个相对小的,可独立管理的部分,称为分区。
(二)分区的优势
- 提高数据可管理性。对表进行分区,数据的加载、索引的创建与重建、数据的备份与恢复等操作都可以在分区表上进行,而不必在表级别上进行,提高了数据的可管理性;
- 增强数据库的可用性。某个分区出现问题,只影响该分区,其它分区照常运作;
- 改善查询性能。将对整个表的查询转化为对某个分区表的查询,提高了查询速度;
- 提高数据库操作的并行性。可对分区表进行并行操作;
- 透明性。将一张表分区后,对于用户而言是无感的,即用户不会感知到有多个分区表的存在,用户不需要对SQL语句做处理;
(三)什么时候需要分区
(1)什么时候对表进行分区
- 表大于2G;
- 对一个表并行进行DML操作;
- 为了平衡硬盘I/O,需将同一个表分区到不同的表空间,必须对表进行分区;
- 要将表的一部分设为只读状态,另一部分设为读写状态,需要对表进行分区;
- 要将表一部分设为可用状态,另一部分设为不可用状态,需要队标进行分区;
- 要将表中数据按照一定规则分散到不同的磁盘中去,需要对表进行分区;
(2)什么时候对索引进行分区
- 为了避免移动数据时重建整个索引,可对索引分区,在重建索引时,只需重建与数据分区相关的索引;
- 在对分区表进行维护时,为了避免整个表的索引处于不可用状态,可将索引进行分区。当对分区表进行维护时,只需将该分区表的索引置为不可用状态,并不会影响到其它分区索引的使用;
- 索引表的急剧增长导致索引条目的剧增,使得整个索引表非常大,影响索引速度,需要对索引分区;
(四)分区方法
oracle数据库提供了3种分区方法:范围分区(Range Partitioning)、列表分区(List Partitioning)和散列分区(Hash Partitioning),结合3种方法,又可以进行复合分区。
(1)范围分区(Range Partitioning)
范围分区是根据分区列值的范围对表进行分区,每条记录根据分区列值的范围分配到不同的分区表中。常用于按照日期分区的表。
(2)列表分区(List Partitioning)
如果分区列值的并不能划分范围(非数值或日期类型),但是分区列的值仅包含少数值,可采用分区列,将特定的值保存到分区中。例如,要统计整个省的人口信息,如果将全部信息放在一张表中,那么表将会非常臃肿,这时候我们可以考虑按照列表分区,将人口信息按照市分配到多个分区表中。
(3)散列分区(Hash Partitioning)
基于分区列的哈希算法,将数据均匀分不到指定的分区中,一个记录分配到哪个分区中是由Hash函数决定的。
(4)复合分区(Composite Partitioning)
复合分区是结合两种基本分区方法,先采用一种分区方法进行分区,然后再采用另一种方法进行分区。
(五)分区索引
(1)本地分区索引
本地分区索引是为分区表中的各个分区创建单独的索引分区,各个索引分区之间是相互独立的,索引的分区与表的分区是一一对应的。
图.分区表与本地分区索引一一对应
(2)全局分区索引
全局分区索引是对整个表建立索引,然后再对索引进行分区。索引的分区之间不是相互独立的,索引分区与表分区也不是一一对应的关系。
【未完】