分区表建索引问题

mixmix 2010-09-15 11:09:12
问题如下:我经常做一个表的查询包括4个字段是 where a=? and b=? and c=? and d=?
现在按照 a和b字段建立了复合分区,现在想知道建索引的时候是建立一个包括a,b,c,d四个字段的联合索引好,还是只建立c,d两个字段的联合索引(因为a,b已经分区了).
...全文
694 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ojuju10 2010-09-27
  • 打赏
  • 举报
回复
分区表如果想要用到分区查询,查询条件中肯定包含A=? B=?否则分区没有效果

你可以试一下到底建C、D还是A、b c d自己测试一下效果吧
zglluck 2010-09-27
  • 打赏
  • 举报
回复
索引建在c,d上面吧。
epsilon-delta 2010-09-25
  • 打赏
  • 举报
回复
[Quote=引用楼主 mixmix 的回复:]
问题如下:我经常做一个表的查询包括4个字段是 where a=? and b=? and c=? and d=?
现在按照 a和b字段建立了复合分区,现在想知道建索引的时候是建立一个包括a,b,c,d四个字段的联合索引好,还是只建立c,d两个字段的联合索引(因为a,b已经分区了).
[/Quote]

如果你的查询是希望使用这个索引,同时又希望使用到分区特性partition pruning,那建议将分区字段加入索引,同时将索引建为local index,local index实际就是一个分区一棵索引树,oracle在查询local索引时,如果查询条件中有限制查询部分分区,就会只查询对应分区的索引树,而不会扫描全表的索引,这样对于效率提高也很有好处。

另外,如果分区字段并不是高筛选度的字段,那建议将高筛选度的字段放在索引前列,原因和一般索引的原理一样,只要是local索引,即使查询条件中的分区字段没有作为索引匹配列,一样可以使用到分区特性partition pruning

比如你的例子分区字段为A、B,索引中还有C、D两个字段,索引中的列顺序建为{C、D、A、B}
对于下面的查询一样可以限定到到某个分区,里面的A、B其实没法作为真正的匹配列,这个可以从执行计划中看出
select ... from ...
where c = ? and a=? and b?
changhe325 2010-09-25
  • 打赏
  • 举报
回复
我看了我们的生产数据库,分区索引里面都包括了分区字段,但是位置不是第一个。至于为啥俺也不清楚。
帮顶。
liuyi8903 2010-09-22
  • 打赏
  • 举报
回复
还要看你的dml的情况啊。
etsilence 2010-09-22
  • 打赏
  • 举报
回复
如果你的查询条件每次都是4个,用联合索引好.
gelyon 2010-09-15
  • 打赏
  • 举报
回复
你查询条件就指定了A,B,而A,B你又建了分区的,因此只需要考虑再建C,D的联合索引就行了,主要是你查询条件已经定死了要用A,B分区。
chaoyugang 2010-09-15
  • 打赏
  • 举报
回复
既然是经常用,可以建四个组合索引。你可以试下,对比下效率啊。
心中的彩虹 2010-09-15
  • 打赏
  • 举报
回复
[Quote=引用楼主 mixmix 的回复:]
问题如下:我经常做一个表的查询包括4个字段是 where a=? and b=? and c=? and d=?
现在按照 a和b字段建立了复合分区,现在想知道建索引的时候是建立一个包括a,b,c,d四个字段的联合索引好,还是只建立c,d两个字段的联合索引(因为a,b已经分区了).
[/Quote]

a和b字段建立了复合分区 查询指定了分区表 可以考虑cd
minitoy 2010-09-15
  • 打赏
  • 举报
回复
感觉是cd的联合索引号.查询里用到了a和b,会找到相应的分区.

3,497

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧