关于global index、local index、global partition index的适用场景

来源:互联网 发布:命令模式入门 java 编辑:程序博客网 时间:2024/06/15 12:36

今天看到大牛们的讨论,把他们的总结记录下来,供自己参考学习。

1.一个大原则,能创建local index的尽量创建local index。无论从分区管理角度,还是查询性能local index都有优势;
2.那什么是否无法创建local index的情况呢?那就是查询条件和分区键值不符的情况,例如主键是保单号,分区键是日期,又要通过保单号查询,这种情况下,将保单号创建为global index较为适合;
3.如果主键是复合索引并且包含分区键,或者主键本身就是分区键则当然还是local index;
4.如果查询条件中包含分区键,那肯定是创建local index,因为可以使用到partition pruning技术。但local index是否一定要包含分区键则又另当别论;
5. 在Oracle文档中,一般建议OLTP系统因为查询条件变化多,单次查询数据量少,所以会较多global index;而在OLAP系统,多从维护和并行查询角度出发,建议多local index。不过从平安实际环境来看,基本上一个系统我们要全盘考虑;

以上是大的原则,在某些情况下我们可能又需要突破这些原则:
1.在数据仓库类型应用或者负载中,虽然查询没有分区键,但为了分区管理便利,而且可以使用并行查询来提升性能;
2. 在OLTP中,global index可能会导致并发竞争。为了缓解并发竞争,
   在分区数量不多的情况下,可能会选择local index。虽然串行扫描多个分区会降低性能,但缓解了并发竞争的消耗,取得一个平衡;
   在分区数量多的情况下,这个时候更好的选择应该是global partition index,因为如果分区过多,local index全分区扫描的性能会大幅降低,这样单次执行的时间会变长,会加剧并发竞争。