基于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 有些东西还不懂,多谢~
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 有些东西还不懂,多谢~
解决方案 »
- 求助sql
- 怎样在VC的ado连接中以sys用户名登录oracle???
- 如何在数据字典找出包定义的函数和存储过程?
- 一个简单的循环处理,请高手帮忙解答,感谢!
- insert插入后ROWID值的问题
- 清问oracle中有没有和sqlserver中从结果集累加的机制,谢谢
- ◆◆oracle9i与8i比,有什么改进和优点(越详细越号,答辩用)?UP者有分◆◆
- 求oracle的下载地址
- 我在表中输入中文记录,select出来却是乱码,请指教。
- 这两句sql有本质区别吗 高手请入
- 删除表时提示:递归 SQL 级别1 出现错误 表或视图不存在
- oracle 11.2.0 $emca -config dbcontrol db -repos create; 报错
可以的,只要有一个标准即可。都 行。
2.这样是字符串比较,效率不高。
你不用日期戳吗?
还是,你也可用主键比较啊
id>44,之类的
我的序列与时间同步,即,日期早,序列小,后者,则大。
现在我的主要问题是,像在不修改过程和应用程序和表结构的情况下,怎么能让查询根据我的现有条件,匹配分区.
不知道可不可以加hint的方式。你可以看看
oracle 自身会根据你的语句判断最优的处理过程。不需要你担心分区的问题。