将多个指定分段存储在单个数据库空间

对于使用基于表达式的分布方案或循环分布方案的分段表,可以创建可位于单个数据库空间中的指定分段。

对于使用基于表达式、时间间隔、列表或循环法的分布方案的分段表,可以创建可位于单个数据库空间中的指定分段。

将多个表或索引段存储到一个数据库空间中时的查询性能要优于将每个段存储到不同数据库空间中时的查询性能,并且简化了数据库空间的管理。

假设您要使用基于表达式的分布方案创建分段表,该分布方案中的每个表达式都会指定放置在特定分段中的数据集。您可决定使用某个数据库空间中某个月的 数据以及其他的 11 个数据库空间中的 11 个月的数据分割表中的数据。然而,如果要对所有年度数据仅使用一个数据库空间,那么可以创建指定分段,使每个月的数据存储在一个数据库空间中。

如果创建具有指定分段的分段表,sysfragments 系统目录中每行的分区列中都会包含分段名称。如果创建没有指定分段的分段表,那么数据库空间的名称位于分区列中。sysfragments 目录中的标志列告诉您分段存储方案中是否具有指定分段。

可以创建具有指定分段的表和索引,并且可以使用 PARTITION 关键字和分段名称创建、删除和修改指定分段。

要创建具有指定分段的分段表,请如以下示例中所示使用 SQL 语法:
CREATE TABLE tb1(a int) 
   FRAGMENT BY EXPRESSION
     PARTITION part1 (a >=0 AND a < 5) IN dbspace1,
     PARTITION part2 (a >=5 AND a < 10) IN dbspace1
          ...
       ;
如果创建的表或索引分段包含指定分段,那么在使用 ALTER FRAGMENT 语句时必须使用包含指定分段名称的语法,如以下示例中所示:
ALTER FRAGMENT ON TABLE tb1 INIT FRAGMENT BY EXPRESSION
    PARTITION part_1 (a >=0 AND a < 5) IN dbspace1,
    PARTITION part_2 (a >=5 AND a < 10) IN dbspace1;
ALTER FRAGMENT ON INDEX ind1 INIT FRAGMENT BY EXPRESSION
    PARTITION part_1 (a >=0 AND a < 5) IN dbspace1,
    PARTITION part_2 (a >=5 AND a < 10) IN dbspace1;
按此示例中所示,可使用 PARTITION BY EXPRESSION 子句替代 CREATE TABLE、CREATE INDEX 和 ALTER FRAGMENT ON INDEX 语句中的 FRAGMENT BY EXPRESSION 子句:
ALTER FRAGMENT ON INDEX idx1 INIT PARTITION BY EXPRESSION 
           PARTITION part1   (a <= 10) IN idxdbspc1,
           PARTITION part2   (a <= 20) IN idxdbspc1,
           PARTITION part3  (a <= 30) IN idxdbspc1;
使用 ALTER FRAGMENT 语法将不具有指定分段的分段表和索引更改为具有指定分段的表和索引。以下语法显示了如何可将具有多个数据库空间的分段表转换为具有指定分段的分段表:
CREATE TABLE t1 (c1 int) FRAGMENT BY EXPRESSION
     (c1=10) IN dbs1,
     (c1=20) IN dbs2;
ALTER FRAGMENT ON TABLE t1 MODIFY dbs2 TO PARTITION part_3 (c1=20)
 IN dbs1
以下语法显示了如何可将分段索引转换为包含指定分段的索引:
CREATE TABLE t1 (c1 int) FRAGMENT BY EXPRESSION
          (c1=10) IN dbs1, (c1=20) IN dbs2, (c1=30) IN dbs3
CREATE INDEX ind1 ON t1 (c1) FRAGMENT BY EXPRESSION
          (c1=10) IN dbs1, (c1=20) IN dbs2, (c1=30) IN dbs3
ALTER FRAGMENT ON INDEX ind1 INIT FRAGMENT BY EXPRESSION
          PARTITION part_1 (c1=10) IN dbs1, PARTITION part_2 (c1=20) IN dbs1, 
          PARTITION part_3 (c1=30) IN dbs1,

请参阅《GBase 8s 性能指南》以获取有关分段存储的更多信息,包括分段存储指南、分段索引的过程、创建具有指定分段的连接和拆离索引的过程,以及用于创建包含指定分段的连接和拆离索引的 SQL 语句的示例。

请参阅 GBase 8s SQL 指南:语法 以获取更多的语法详细信息,包括 GRANT FRAGMENT 和 REVOKE FRAGMENT 语句中有关指定分段的信息以及有关使用 ALTER FRAGMENT 语句的 DROP、DETACH 和 MODIFY 子句的详细信息。