Oracle的分区表也不是十分好用, 当分区的数目比较多时, 很可能让一些不能进行Partition Prune的SQL拥有很高的逻辑读(Consistent Gets), 解决的办法是将一些索引建成全局索引. 现在我们来看一下相反的例子, Oracle中的表是不分区的, 而且访问量最多的SQL是根据一个选择性很好的索引去走的, 每次执行的逻辑读也就只有4-6个了, 因为访问量很高, 如果能降底一个逻辑读的话, 也可能降底整个系统5%-10%的逻辑读, 我们应当从哪儿来考虑呢? 索引的层次(Level)绝对是一个值得研究的角度. 事实上如果我们能让索引的层次(Level)高度降一级, 就可以降低一个逻辑读了, 通过常有以下的方法可用:

1, Rebuild索引.
2, 删除一部份数据后重建索引.
3, 将索引建到一个较大Block Size的表空间中.
4, 建成Global Partitioned索引.

    什么是Global Partitioned索引? 指的是在非分区表上建的分区索引, 或者是分区表上但分区方法和表不相同的索引. 通过分区技术, 我们可以将一个大的索引划分为小片, 从而降底索引的层次(Level). 下面来看一下如何在非分区表上建分区索引:

create table t_objects as select * from all_objects;
create index t_objects_id_idx on t_objects (object_id)
   global partition by hash(object_id) partitions 4;

    虽然表是非分区表, 但有了这样一个分区的索引后, 所有这个表的SQL都将采用CBO, 这是需要考虑的地方, 取决你的SQL现在运行的方式.