表分区
分区
在Oracle数据库中,为了提升对大表/大索引的可管理性、可维护性以及性能,Oracle引入了分区表机制,可以将大表/大索引分解为多个小的、可管理的分区。多个分区相对独立,有独立的存储结构,共同构成了整个完整的表/索引。分区对应用透明,即对访问数据库的应用而言,逻辑上讲只有一个表或一个索引(相当于应用看到的仍然只是一个表或索引),但在物理上这个表或索引可能由数个物理分区组成。
分表和分区表的区别
为了分散存储大表/索引的数据,另外一种途径是分表,分表是将一个大表按照一定的规则分解成多张具有独立存储空间的实体表。分表完全独立,在逻辑上是多张不同的表,而分区表在物理上是一张表。分区表对应用透明易于管理维护,分表不易于管理维护。
分区表设计原则
当表的大小超过1.5GB-2GB,或对于OLTP系统,表的记录超过了1000万,都应该考虑对表进行分区。
基于表的大部分查询,只访问表中少量的数据。对于这样的表进行分区,可以充分利用分区排除无关数据查询的特性。
按时间段删除成批的数据,例如按月删除历史数据。对于这样的表需要考虑进行分区,以满足维护的需要。
按时间周期进行表空间的备份时,将分区与表空间建立对应关系。
如果一个表中大部分数据都是只读数据,通过对表进行分区,可将只读数据存储在只读表空间中,对数据库的备份是非常有益的。
对于经常执行并行操作(如Parallel Insert,Parallel Update等)的表应考虑进行分区。
当对表的部分数据可用性要求很高时,应考虑进行表分区。
分区优点
1、分区技术使数据库的可管理性变得更加容易,如:用户可以往一个单独的分区中装载数据,而对其他分区没有任何影响;用户可以在单独的分区上创建索引等。
2、分区可以提高表的查询性能,SQL语句的where子句会过滤掉不需要的分区,oracle不会再扫描那些不需要的分区。
3、分区技术减少数据的不可用时间,用户可以单独维护一个分区中的数据,而不影响其他分区中数据的使用。
4、分区技术在数据库级完成,几乎不需要对应用程序做任何修改。
Oracle提供的分区方法
范围分区:根据表中列值的范围将整个表分成不同的部分,如按照时间进行范围分区。
列表分区:使用列表值将表划分成几部分。
哈希分区:使用哈希函数把表分成几部分。
复合分区:同时使用两种分区方法对表进行分区。