日期:2014-05-17  浏览次数:21096 次

oracle 分区表 即查询的2个问题
基于linux下的oracle 数据库,crbt_bill表非常大,现想对齐进行表水平分区,大概的思路是,按时间分区,每个月一个分区,一次性规划5年的分区,但是目前还存在一些几点问题:
1、 分区键如何选取?
因为在对该表进行数据提取 时候,用到了2个时间,如果是creat_time、还有一个是
insert_time,这样无论选取哪个时间作为分区键,都会造成一部分数据需要跨分区查询。
目前打算以insert_time作为 分区键。

2、 如何才能在正确的分区中查询?
在不修改相关过程的情况下,如何才能将查询限制在2个分区(上面已经提到,无论如何都会跨2个分区),而不会全表扫描。虽然可以通过指定分区进行查询,但是如果在不修改查询代码的情况下,是不是可以通过索引达到目的呢?索引该如何建?
例如select* from crbt_bill where insert_time >=to_date(’2013-01-01 00:00:00’,'yyyy-mm-dd hh24:mi:ss' and insert_time < to_date(’2013-02-01 00:00:00’,'yyyy-mm-dd hh24:mi:ss' 可以智能的匹配到201301 分区查询。

刚刚学习oracle 有些东西还不懂,多谢~

------解决方案--------------------
指定分区名 :select* from crbt_bill partition (分区名) where insert_time >=to_date(’2013-01-01 00:00:00’,'yyyy-mm-dd hh24:mi:ss' and insert_time < to_date(’2013-02-01 00:00:00’,'yyyy-mm-dd hh24:mi:ss' 
oracle 自身会根据你的语句判断最优的处理过程。不需要你担心分区的问题。