分区表的非分区索引

非分区索引是单一的索引对象,它引用分区表中所有的行。 非分区索引始终作为单一表空间中的独立索引对象进行创建,即使表数据分区跨多个表空间亦如此。

当您为分区表创建索引时,该索引在缺省情况下为分区索引,除非您创建下列其中一种类型的索引:
  • 索引键未包含所有表分区列的唯一索引
  • 空间索引
在这些情况下,您创建的索引为非分区索引。 但是,在某些情况下,最好或有必要创建非分区索引,即使数据进行了分区也是如此。 在这些情况下,请使用 CREATE INDEX 语句的 NOT PARTITIONED 子句对分区表创建非分区索引。 缺省情况下,创建非分区索引时,它将存储在第一个可视的或者所连接的数据分区所在的表空间中。 图 1 显示了引用表中所有分区的单个索引 X1的示例。 将在表的第一个可视分区所在的表空间中创建此索引。
图 1。 分区表的非分区索引
分区表上的非分区索引的图示
图 2 显示了两个非分区索引的示例。 在本例中,每个索引分区与数据分区在不同的表空间中。 请再次注意每个索引引用表中所有分区的方式。
图 2。 分区表的非分区索引(索引在它们自己的表空间中)
此图说明分区表上的两个非分区索引,其中每个索引都位于其自己的表空间中
在下列时候,您可以更改非分区索引的位置:
  • 在创建表时,使用 CREATE TABLE 语句的 INDEX IN 子句进行更改
  • 在创建索引时,使用 CREATE INDEX 语句的 IN 子句进行更改
第二种方法始终优先于第一种方法。

如果使用 ALTER TABLE 语句的 ATTACH PARTITION 子句将数据滚动到分区表,那么必须运行 SET INTEGRITY 语句以使相连分区的数据进入联机状态以供查询。 如果索引是非分区索引,那么使相连分区的数据进入联机状态这一操作可能相当耗时,此操作将使用相当多的日志空间,这是因为 SET INTEGRITY 必须将新连接的分区中的数据插入到非分区索引中。

在拆离分区之后,不必运行 SET INTEGRITY。