oracle中两列的range分区如何跨范围查询

分区表按年度+月份范围range分区,语句如下:建表语句有valueslessthan...等方式,如何在查询中也使用这种方式呢现在有一个需求:找一种最最高效的方式查询2... 分区表按年度+月份 范围range分区,语句如下:

建表语句有values less than...等方式,如何在查询中也使用这种方式呢
现在有一个需求:找一种最最高效的方式查询 2010年5月 至 2012年8月的全部数据
这个sql语句十分别扭,使用很多个union all并在一起的
有没有一种方式直接查出指定一些分区的数据呢
比如: where (kjnd, kjqj)>=('2010', '05') and (kjnd, kjqj)<=('2012', '08'), 就想要实现这种方式的查询
就是实现两个字段同时比较大小,当第一个字段能够比较出大小,就比较第一个字段,否则(比如相等)就比较第二个字段
因为我想到建立分区时候语句如上图所示,所以我想,两个字段的范围分区,也应该有两个字段的范围查询吧,创建分区的时候,有一个values,这个values究竟是多少,如何用于查询比较呢,
或者说如何从指定分区开始,到一个指定分区为止,把这些范围的数据全部扫描出来,有这种方式吗
展开
 我来答
tj_angela
2015-07-23 · TA获得超过7530个赞
知道大有可为答主
回答量:6797
采纳率:75%
帮助的人:2597万
展开全部
range分区可以直接通过filter分区键查询,oracle会根据执行计划自动优化sql
9iTreeNewBee
2015-04-01 · TA获得超过505个赞
知道小有建树答主
回答量:1800
采纳率:55%
帮助的人:425万
展开全部
你确定 这样的where 条件可用么?

SQL> select * from test;

ID N1 N2
---------- ---------- ----------
1 2 3
1 2 3
2 3 4
3 4 5

SQL> select * from test where (n1,n2)>=(3,4);
select * from test where (n1,n2)>=(3,4)
*
第 1 行出现错误:
ORA-01796: 此运算符不能与列表一起使用
追问
当然不可用了,我想实现这样的查询效果,range分区,定义的时候本身就有这种方式,values less than 所以我想,这种定义方式能不能用于查询,有一种方式来这样查询范围分区吗,或者说指定一个分区开始,如:P_1001_200901,查询50个分区,有这种方式吗
追答

大概了解你的意思了  看看这样行不行

SQL> set autot traceonly

建索引后就不会遍历所有分区

新建索引后 会根据索引键值+ROWID去搜索分区里的数据  这样应该会高效点


妹的 字数超限  只能发图了

本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式