暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

南大通用GBase8s 常用SQL语句(五十四)

晚安的星星云 2022-01-19
507

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 可能不支持此功能。

 

 

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论