索引的 FRAGMENT BY 子句

可以使用 FRAGMENT BY 子句重新定义索引的存储分布策略,而不重新定义该索引。在本文中 FRAGMENT BY 和 PARTITION BY 的关键字类似。

索引的 FRAGMENT BY 子句
表达式分片子句
元素 描述 限制 语法
dbspace 包含分片信息的 Dbspace 必须指定至少两个但不超过 2,048 个同一页大小的 dbspaces 标识符
expr 定义索引分片的表达式 对于同一索引其分片表达式必须唯一,必须返回Boolean 值 条件; 表达式
fragment _key 基于列值的常量表达式。该索引根据此表达式分片。 任何列必须在此当前表中 表达式
part 您在此处为一个指定的分片的名称。缺省值为 dbspace 的名称。 对于与同一索引的另一个分片相同的 dbspace 中的任何分片都是必须的。在同一索引的分片中必须是唯一的。 标识符
ALTER FRAGMENT 语句的中索引的 INIT FRAGMENT BY 子句可以在现有索引的存储分布方案上完成以下任一操作,而不需重新定义索引:

要更改现有的被范围区间策略分片的索引区间值表达式或分片键表达式,您必须使用 ALTER FRAGMENT 语句的 INIT FRAGMENT BY RANGE 选项(而不是 MODIFY 子句)。当您更改其中之一或所有的表达式时,ALTER FRAGMENT ON INDEX 语句中的 Interval Fragment 子句必须定义至少一个范围分片。

当您使用 FRAGMENT BY 或 PARTITION BY 子句将现有存储分片策略转换为另一个分配策略时, GBase 8s 会废弃现有的分片策略并将数据记录移动到新分片策略中您定义的分片中去。当您将一个未分片索引转换为分片索引和将分片索引转换为未分片索引时,数据移动同样发生。

将一个现有的已分片的索引转换为未分片的索引时,您可以使用 INIT 子句指定 IN dbspace(或 PARTITION partition IN dbspace)作为前一个分片索引的唯一存储规范。

正如 CREATE INDEX 语句定义的基于表达式索引分片方案,您在 ALTER FRAGMENT ON INDEX . . . INIT FRAGMENT BY EXPRESSION 语句中指定的每一个表达式都要应用以下限制:

以上限制同样适用于列表和范围区间索引分片结构的分片键表达式,包括 CREATE INDEX 语句的 FRAGMENT BY 子句定义的分片策略。

1 请参阅 Interval fragment 子句
2 请参阅列表分片子句