架构深渊

慢慢走进程序的深渊……关注领域驱动设计、测试驱动开发、设计模式、企业应用架构模式……积累技术细节,以设计架构为宗。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

分区表与查询性能

Posted on 2009-04-22 01:55  chen eric  阅读(1224)  评论(0编辑  收藏  举报
所谓分区提高性能,是缩小table access时的scan范围,付出极少的代价,减少I/O操作,得到更高的性能。在partition table上创建的global index和local index,都是在平衡这个付出的代价和对index scan的范围。
所以,对性能的提高与否,完全与应用有非常非常直接的关系。
打个比方:
table t1=10G,start_time index=1G,都是以start_time按时间顺序插入的数据,时间间隔很平均,比如每半小时10M这样,现在以time分了10个range分区,每个区1G。
如果你是查询的数据只在某一个分区里,where start_time,那么现在的性能是得到很大提高的,以前你可能需要scan 10G,现在只需要scan 1G,同样,如果你用了分区前的index和分区后的local index,那么以前scan index很可能要scan 1G,现在可能scan 100M就可以了。

但是,如果你需要对这10个partition都要做scan才能得到你需要的计算结果,比如做月报,季报等的时候,此时scan 这10个partition,和scan未分区时候的full scan来说,未分区时候的性能更好一点。
当然了,如果计算的字段不是很多,可以创建global index来解决这个问题。

所以你问分区是不是就能提高性能,真的不敢乱说。
分区所得到的性能优化,我认为完全是与table结构,以及应用在table上的SQL操作是非常非常想关的,以及partition的运用方法有关的,用的好,性能提高非常非常大,用的不好,多的都亏了,变的更差。

---
oracle分区表优点

oracle分区表

分区有利于管理更大的表和索引,在分区中引入了一个分区键的概念,分区键用于根据某个区间值、特定值列表、或散列函数执行数据的聚集。

使用分区表可能有如下好处:

1提高数据的高用性:可用性的提高源自于每个分区的独立性,一个分区的可能不能等同于对象本身的可用。优化器知道这种分区机制,会相应的从查询计划中去除未引用的分区。

2。减轻管理负担。

这个很容易理解。管理10G的表和管理100G的表。

3 改善某些查询性能

在只读查询的性能方面,分区对两类操作起作用

1 分区消除:处理查询时,不考虑某些数据分区.

2并行操作:并行全表扫描和并行索引区间扫描.(和操作系统有关)

4。减少资源竞争。