可使用带有 INIT 子句的 ALTER FRAGMENT 语句来对非分段表定义并初始化新的分段存储策略,或对分段表转换现有分段存储策略。还可以使用 INIT 子句来更改分段表达式的求值顺序。
以下示例显示您可如何使用 INIT 子句来彻底地重新初始化分段存储策略。
CREATE TABLE account (acc_num INTEGER, ...) FRAGMENT BY EXPRESSION acc_num <= 1120 in dbspace1, acc_num > 1120 and acc_num < 2000 in dbspace2, REMAINDER IN dbspace3;
假定使用此分布方案运作了数个月后您发现 dbspace2 中包含的分段中的行数是另外两个分段所包含的行数的两倍。这种不平衡导致包含 dbspace2 的磁盘成为 I/O 瓶颈。
要校正这种情况,您决定修改分布,以使每个分段中的行数大致均匀。应修改分布方案以使其包含四个分段而不是三个分段。新的数据库空间 dbspace2a, 用于包含新分段,该新分段存储先前包含在 dbspace2 中的前半部分的行。dbspace2 中的分段包含它先前存储的后半部分的行。
ALTER FRAGMENT ON TABLE account INIT FRAGMENT BY EXPRESSION acc_num <= 1120 in dbspace1, acc_num > 1120 and acc_num <= 1500 in dbspace2a, acc_num > 1500 and acc_num < 2000 in dbspace2, REMAINDER IN dbspace3;
执行此语句时,数据库服务器将立即废弃旧的分段存储策略,并且根据新的分段存储策略将表包含的行重新分布。
有关更多信息,请参阅 GBase 8s SQL 指南:语法 中的 ALTER FRAGMENT 语句。