Extent Size 选项
Extent Size 选项可定义分配到索引的存储 extent 的大小。
Extent Size 选项
元素 描述 限制 语法
first_kilobytes 该索引的第一个 extent 的长度(以千字节为单位) 必须返回正整数;最大值是 chunk 大小,以千字节为单位 表达式
next_kilobytes 每个后续的 extent 的长度(以千字为单位) 同 first_kilobytes 一样 表达式
first_kilobytes (next_kilobytes)的最小长度是您系统上磁盘页大小的四倍。例如,如果您有 2 千字节的页系统,则最小长度是 8 千字节。
如果需要修改索引的 extent 大小,则您可以修改生成的卸载表的模式文件中 extent 和下一个 extent 大小。例如,要使数据库更有效率,您可以删除该索引,修改模式文件中的 extent 大小,然后创建新的索引。有关如何优化 extent 的更多信息,请参阅 GBase 8s 管理员指南 。
只有您为该索引显式分配作为 extent 大小的 extent 大小的值存储在系统目录中。您在 CREATE INDEX 语句的 EXTENT SIZE 选项中指定的值存储于 sysindices 系统目录表的 fextsize 列,NEXT SIZE 选项中指定的值存储于同一表的 nextsize 列中。然而,如果您省略这些选项,数据库服务器在这些系统目录列中存储零值( 0 ),而非它为该索引的第一个 extent 和第二个 extent 计算并分配的缺省值。
定义带显式 extent 大小的索引的示例
以下程序段创建了新表并在该表上定义了两个未分片的索引。
CREATE TABLE IF NOT EXISTS t (a INT, b INT);
CREATE INDEX IF NOT EXISTS idx1 ON t(a) EXTENT SIZE 32 NEXT SIZE 32;
CREATE INDEX IF NOT EXISTS idx2 ON t(b);
此处 idx1 的定义指定 32 千字节作为显式 extent 大小。第二个索引 idx2 ,具有系统计算的缺省 extent 大小。这两个 CREATE INDEX 语句包含这些 extent 大小条目的索引的系统目录描述:
sysindices.fextent 和 sysindices.nextent 列值对 idx1 分别为 32 。
sysindices.fextent 和 sysindices.nextent 列值对 idx2 分别为 0 。
此处 idx2 的 0 值指示没有指定显式 extent 大小(并非指示未分配存储空间)。
IN 子句
使用 IN 子句来指定持有整个索引的存储空间。您指定的存储空间必须已经存在。
在 dbspace 中存储索引
使用 IN dbspace 子句指定您希望索引驻留的 dbspac。当和任何选项(除了 TABLE 关键字)一起使用此子句时,将创建拆离的索引。
IN dbspace 子句允许您隔离索引。例如, 如果 customer 表在 custdata dbspace 中创建,但您希望在称为 custind 的单独的 dbspace 中创建索引,请使用以下语句:
CREATE TABLE customer
. . .
IN custdata EXTENT SIZE 16;
CREATE INDEX idx_cust ON customer (customer_num) IN custind;
在命名的分区中存取索引分片
除了在 dbspace 中存储索引分片的选项, GBase 8s 还支持在一个或多个 dbspaces 的命名子集中存储索引的分片。除非显式地在 PARTITION BY 或 FRAGMENT BY 子集中声明分片的名称,缺省情况下,每个分片都与它所驻留的 dbspace 拥有相同的名称。这包括了所有分片表和由 GBase 8s 较早期发行版中迁移过来的索引。
在 extspace 中存储数据
通常,extspace 存储选项与使用 access-method 子句一起使用。有关更多信息,请参阅您所使用的定制存取方法的用户文档。
使用 IN TABLE 关键字创建索引
指定 IN TABLE 作为存储选项会创建一个存储行为等同于 GBase 8s 较早版本的缺省的索引。该表的索引和数据页都存储在同一 extent 中,且该索引的 dbspace 分布方案与创建该表时的分布方案相同
使用 IN TABLE 作为存储选项,对未分片 B-tree 索引指定与启用 DEFAULT_ATTACH 环境变量相同的存储方案,但是 DEFAULT_ATTACH 和 IN TABLE 关键字都是不建议使用的功能。
DEFAULT_ATTACH 环境变量的名称保留术语连接索引的过时定义。在当前 GBase 8s 术语中,该术语现在指定一个索引,其数据页存储在单独的 tablespace 中,并且是表的数据页单独 extent,但是索引和其表共享同一 dbspace 分布方案有关更多信息,请参阅 GBase 8s SQL 参考指南 中 DEFAULT_ATTACH 的描述。
以下限制应用于作为索引存储选项的 IN TABLE 关键字:
如果您定义索引的表是未分片表,则当指定 IN TABLE 选项时, GBase 8s 发出错误 -212 和 -130 。
你不能在森林树索引上应用 IN TABLE 存储选项。
该选项不支持与可扩展性相关的索引,如 R-tree 索引、函数型索引或 DataBlade 模块提供的索引。
不能使用不同于该表或不同于 DB_LOCALE 所指定的一个排列顺序创建附加索引。有关 DB_LOCALE 环境变量的更多信息,请参阅 GBase 8s SQL 参考指南 。
GBase 不建议新的应用程序中使用 IN TABLE 存储选项 DEFAULT_ATTACH 环境变量。这样的索引是一个不推荐使用的功能,以后发行的 GBase 8s 可能不支持此功能。