分离索引

拆离索引 是具有使用 CREATE INDEX 语句显式设置的单独分段存储策略的索引。

以下示例 SQL 语句创建了拆离索引:
CREATE TABLE tb1 (a int)
      FRAGMENT BY EXPRESSION
               (a <= 10) IN tabdbspc1,
               (a <= 20) IN tabdbspc2,
               (a <= 30) IN tabdbspc3;

CREATE INDEX idx1 ON tb1 (a)
      FRAGMENT BY EXPRESSION
               (a <= 10) IN idxdbspc1,
               (a <= 20) IN idxdbspc2,
               (a <= 30) IN idxdbspc3;

此例描述了常见的分段存储策略,它对索引分段的方法与对表分段的方法相同,但是它为索引分段指定了不同的数据库空间。 这种分段存储策略将索引分段放在与表不同的数据库空间中,可提高一些操作的性能,如备份、恢复等等。

除非指定了不建议使用的 IN TABLE 语法,否则,在缺省情况下,CREATE INDEX 语句创建的所有新索引都在与数据不同的表空间中分离和存储。

要创建具有分区的拆离索引,请在 SQL 语句中包括分区名称,如此示例中所示:

CREATE TABLE tb1 (a int)
      FRAGMENT BY EXPRESSION
                        PARTITION part1   (a <= 10) IN dbs1,
                        PARTITION part2   (a <= 20) IN dbs2,
                        PARTITION part3 (a <= 30) IN dbs3;

    CREATE INDEX idx1 ON tb1 (a)
          FRAGMENT BY EXPRESSION
                        PARTITION part1   (a <= 10) IN dbs1,
                        PARTITION part2   (a <= 20) IN dbs2,
                        PARTITION part3 (a <= 30) IN dbs3;

可在 CREATE TABLE、CREATE INDEX 和 ALTER FRAGMENT ON INDEX 语句中使用“PARTITION BY EXPRESSION”而不是“FRAGMENT BY EXPRESSION”。

如果不想对索引进行分段,可以将整个索引放入一个单独的数据库空间。

您可以使用表达式对任何表进行索引分段。 然而,您不能为索引显式创建循环分段存储方案。 每当使用循环分段存储方案对表进行分段时,都将所有与表伴随的索引转换为分离索引,以实现最佳性能。

拆离索引具有以下物理特征:

森林树索引是分离索引。它们不能是连接索引。

在系统目录表 sysfragments 中,数据库服务器存储每个表和索引分段的位置,以及其他相关信息。 可以使用 sysfragments 系统目录表来访问以下有关分段表和索引的信息:

有关此 sysfragments 系统目录表包含的字段值的完整描述,请参阅《GBase 8s SQL 指南:参考》。有关如何使用 sysfragments 来监视分段的信息,请参阅监视分段使用情况