现在按照 a和b字段建立了复合分区,现在想知道建索引的时候是建立一个包括a,b,c,d四个字段的联合索引好,还是只建立c,d两个字段的联合索引(因为a,b已经分区了).
10 个解决方案
#1
感觉是cd的联合索引号.查询里用到了a和b,会找到相应的分区.
#2
a和b字段建立了复合分区 查询指定了分区表 可以考虑cd
#3
既然是经常用,可以建四个组合索引。你可以试下,对比下效率啊。
#4
你查询条件就指定了A,B,而A,B你又建了分区的,因此只需要考虑再建C,D的联合索引就行了,主要是你查询条件已经定死了要用A,B分区。
#5
如果你的查询条件每次都是4个,用联合索引好.
#6
还要看你的dml的情况啊。
#7
我看了我们的生产数据库,分区索引里面都包括了分区字段,但是位置不是第一个。至于为啥俺也不清楚。
帮顶。
帮顶。
#8
如果你的查询是希望使用这个索引,同时又希望使用到分区特性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?
#9
索引建在c,d上面吧。
#10
分区表如果想要用到分区查询,查询条件中肯定包含A=? B=?否则分区没有效果
你可以试一下到底建C、D还是A、b c d自己测试一下效果吧
你可以试一下到底建C、D还是A、b c d自己测试一下效果吧
#1
感觉是cd的联合索引号.查询里用到了a和b,会找到相应的分区.
#2
a和b字段建立了复合分区 查询指定了分区表 可以考虑cd
#3
既然是经常用,可以建四个组合索引。你可以试下,对比下效率啊。
#4
你查询条件就指定了A,B,而A,B你又建了分区的,因此只需要考虑再建C,D的联合索引就行了,主要是你查询条件已经定死了要用A,B分区。
#5
如果你的查询条件每次都是4个,用联合索引好.
#6
还要看你的dml的情况啊。
#7
我看了我们的生产数据库,分区索引里面都包括了分区字段,但是位置不是第一个。至于为啥俺也不清楚。
帮顶。
帮顶。
#8
如果你的查询是希望使用这个索引,同时又希望使用到分区特性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?
#9
索引建在c,d上面吧。
#10
分区表如果想要用到分区查询,查询条件中肯定包含A=? B=?否则分区没有效果
你可以试一下到底建C、D还是A、b c d自己测试一下效果吧
你可以试一下到底建C、D还是A、b c d自己测试一下效果吧