Oracle 索引分区

摘录自《 ORACLE数据存储与访问技术》

从物理上说,索引是组织索引键值及其行地址的存储手段,是一个具有两字段的特殊表。

Oracle 支持表分区和索引分区的独立设计,即支持 “表不分区-索引不分区、 表分区-索引不分区、 表分区-索引分区、 表不分区-索引分区” 四种组合。

Oracle 支持 本地分区索引 和 全局分区索引。

本地分区索引(local partitioning index)

本地分区索引是指索引的分区方法与对应表的分区方法相同,表的每个分区有自己对应的索引段,创建时用 local 指定索引属性。

本地分区索引的优点:

  1. 取决于分区条件和查询条件的组合,Oracle 能够应用分区裁剪(partition pruning)功能定向到分区索引的特定分区,减小了索引树的规模。
  2. 分区表在分区的维护过程中,如对表的某个分区执行删除(drop)、截断(truncate)、合并(merge)等操作,Oracle 自动对与之关联的本地前缀索引执行相同的操作,且索引始终保持有效的状态,不需要对整个索引进行重建(rebuild)。
  • 本地前缀分区索引(local prefixed partitioning index):本地前缀分区索引是指表分区键是索引键的前导列。

  • 本地非前缀分区索引(local nonprefixed partitioning index):索引键的前导列不是分区键。

全局分区索引(global partitioning index)

全局分区索引在创建时用关键字 global 指定索引属性,且要指定索引的分区规则(分区方法和分区条件)。如果在创建索引时仅指定了 global 关键字而没有明确指定分区规则,则创建的是普通的索引而非分区索引。

全局分区索引与对应的表是否分区没有直接关系,可以在非分区的表上建立全局分区索引。

全局分区索引的潜在缺陷在于分区表的分区维护上,当对一个分区表的分区进行某种操作,如移动(move)、删除(drop)、截断(truncate)、分裂(split)等,分区表上的全局索引会失效(invalid),此时只有重建全局分区索引才能使得索引重新可用,这会影响系统的可用性;对于普通的全局索引,进行这些分区操作时需要更新索引,所以速度会慢些。

应该根据选择性由高到低的顺序决定复合索引中排列顺序,可以提高在利用符合索引访问数据库时的效率。

Oracle 自动在主键上建立索引,建议在表的外键上也要建立索引。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.