oracle中的分区表在系统中使用的频率不小,在一些数据量大的系统中更是频繁出现。
提到分区表,首先就要理解下什么是分区。其实所谓的分区简单来说就是分区域,分区表就是将一张表分区域存放。
那么分区域中的区域又指的是哪里?
那就是传说中存放表的地方--->表空间。
表空间:是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表, 所以称作表空间。
那么为什么要把一张好好的表分开来存放。
当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。
表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个“表空间”(物理文件上),这样查询数据时,不至于每次都扫描整张表而只是从当前的分区查到所要的数据大大提高了数据查询的速度。
前面提到了,一般数据量大的系统中分区表的使用是比较频繁的。
那么一般我们什么时候要建立分区表呢?
1、表的大小超过2GB。
2、表中包含历史数据,新的数据被增加到新的分区中。
使用表分区在解决大数据量表的基础上, 还有下面几个优点:
1、改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。
2、增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;
3、维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;
4、均衡I/O:可以把不同的分区映射到不同磁盘以平衡I/O,改善整个系统性能。
一般的普通表如果要转化为分区表,要用到oracle提供的在线重定义表。
可以参考文章:http://www.cnblogs.com/hfliyi/p/3626302.html
分区表中有一个概念,叫分区字段。那么如何确认分区字段,一张分区表的分区字段是根据什么来确定的。
这里我们只聊两种常用情况。
1. 按范围分区(比如说交易历史表中的交易完成时间,日志表中的事件发生时间)
2. 按列表分区(比如某张业务表中的状态值)
多说一句:选取分区字段和选取索引字段一样, 对这个字段的辨识度要求都比较高。
用数序上的极端分析来说,一个字段的辨识度最低就是这个字段只有一个值,那么在这个上面做索引或者分区,那肯定是狗血透了。
而且分区字段应该能保证表数据的分布基本上是均匀的, 如果有100w条数据,有一个状态列,只有一条状态是inactive的,其他都是active,那么这个字段虽然可以按列表分区,但是却达不到我们建立分区表的目的。