再聊聊分区表
前一阵子写了一点有关分区表的东西(http://www.cnblogs.com/wingsless/archive/2012/02/11/2347111.html)。我们的项目限于甲方的抠门,分配给我们的磁盘空间相当的小,因此我们的项目中并不习惯使用索引这个好用的东西,因为索引也是要耗用很大的空间的,有的时候索引占据的空间比数据表还要大。于是我们约定俗成的使用了分区表,而且很多同事认为分区表就相当于建立了很多很多的小表一样。事实,确实如此吗?
建立一张分区表test1,按照month列进行分区,数据量大概在1200万左右,201205这个分区中有4194304条记录。
建立一张表test_201205,结构和test1一样,只不过只有test1这个表的一部分数据,也就是存在201205这个partition中的所有数据,4194304条记录。
对两张表analyze,这样一来就保证了oracle能正确的生成执行计划。
首先看看分区表的执行计划:
非常好的使用了分区条件。
接下来统计下test_201205的执行计划,如图:
由此可以看出,物理存在的表还是要快一点,但是这个差异已经不大了。
但是有一个有意思的现象,如果把小表中的查询条件加上,就会发生有意思的变化:
加上了一个无关紧要的条件,Cost就变成了和分区表一样的数值。这是为什么,我还是以后慢慢探究吧。
从我以上的探究和过去的博文中的研究可以看出来,分区表在某些时候还是比较具有优越性的。
但是空分区还是要占据空间的。其他的,以后慢慢研究吧。