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

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

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

HASH ON 子句

使用 CREATE INDEX 语句的 HASH ON 子句指定森林树索引的子树(存储区)的数目及其列。

HASH ON 子句

 

元素

描述

限制

语法

column

您使用 HASH ON 子句创建森林树索引的列或列组的名称

该列表必须是在 CREATE INDEX 语句中使用的索引列的前缀列表。

标识符

number

要创建森林树索引所需的子树(存储区)数

森林树索引的存储区数必须在 2 到每个 dbspace 可用索引页数之间。

整数文字

用法

森林树索引是拆离的索引。它们不能是连接的索引。

您可以在基本数据类型的列上创建森林树索引。

您不能:

在具有复杂数据类型的列、UDT 、或函数列上创建森林树索引。

当创建森林树索引时,使用 CREATE INDEX 语句的 FILLFACTOR 选项。因为索引是从顶向底建立。

创建集群的森林树索引。

在森林树索引上运行 ALTER INDEX 语句。

在使用聚合(包括最小和最大范围值)的查询中使用森林树索引。

直接在森林树索引的 HASH ON 列上执行范围扫描。

然而,您可以在不列在 HASH ON 列列表的列上执行范围扫描。对于在 HASH ON 列列表列出的列的范围扫描,您必须创建包含此范围扫描的适当列表的附加 B-tree 索引。该附加 B-tree 索引可能具有与森林树索引相同的列列表,加或减一列。

可对 OR 索引路径使用森林树索引。数据库服务器不会在索引列上具有 OR 为此的查询中使用森林树索引。

当您创建森林树索引时,选择足够的列以创建唯一值。

提示: 一般情况下,要选择的列取决于每一列的副本数。例如,如果第一列包含很少量的副本,如果前两列不包含大量副本,则前两列满足散列。如果前两列包含大量的副本,则您还需要选择第三个列。

子树的数目取决于您创建的索引的目的。如果您的目的是:

为减少争用,最初创建每个 CPU VP 2 个子树的森林树索引。您可能需要更多子树,这取决于表中的行数和存在多少副本。

要减少 B-tree 中层级数:

1. 运行 oncheck -pT 命令。

2. 在此输出中,找到每一层级的节点数。

3. 决定需要多少个子树来实现索引中每个数的期望深度。

例如,假设一个索引每页均有 100 个键,该索引有 1M 个键,则该树则看起来像这样:

· Level 1 (root) 100 keys

· Level 2 10K keys

· Level 3 1M keys

要将 3-level tree 减少到 100 2-level tree, 该索引大概需要 100 个子树。要将 3-level tree 减少到 10K 1-level tree ,该索引大概需要 10K 个子树。

如果使用了太多的或太少的子树,则森林树页面可以比传统的 B-tree 页面更稀疏。当页面稀疏时,更多页占据缓冲池,这将导致其它表的缓存变得更少。

示例

以下命令创建了名为 idx1 的森林树索引,它在 c1 列上有 100 个子树:

CREATE INDEX idx1 ON tab1(c1) HASH ON (c1) with 100 buckets;

以下命令创建了名为 idx2 的森林树索引。在此命令中,该语句的 HASH ON 部分的前缀列表是 c1 和 c2,它是在该语句的 CREATE INDEX 部分中使用的 c1 、c2 和 c3 列的前缀列表:

CREATE INDEX idx2 on tab2(c1, c2, c3) HASH ON (c1, c2) with 10 buckets;

以下命令在列 c1 和列 c2 上创建了一个等式查找的森林树索引:

CREATE INDEX idx3 on tab3(c1, c2) HASH ON (c1, c2) with 100 buckets;

以下命令创建了类似于先前森林树索引的 B-tree 索引。该索引用于列 c1 和列 c2 的范围扫描:

CREATE INDEX idx4 on tab4(c1, c2, c3);  

FILLFACTOR 选项

当您想要创建压缩索引或为以后索引的扩展提供信息时,可使用 FILLFACTOR 选项指定索引页的充满程度。

FILLFACTOR 选项只在以下情况中有效:

· 当在一个含有超过 5,000 行并使用超过 100 个表页的表上构建索引时

· 挡在分片表上创建索引时

· 当在非分片表上创建分片索引时

不能在森林树索引上使用 FILLFACTOR 选项。

FILLFACTOR Option

 

元素

描述

限制

语法

percent

当创建索引时每个被索引数据填充的索引页的百分比。缺省值为 90 。

1 ≤ percent ≤100

精确数值

当创建索引时,数据库服务器最初仅填充 FILLFACTOR 值指定的节点百分比。

FILLFACTOR 还能在 ONCONFIG 文件中作为参数来设置。CREATE INDEX 语句上的 FILLFACTOR 子句覆盖 ONCONFIG 文件中的设定。有关 ONCONFIG 文件和您能使用的参数的更多信息,请参阅 GBase 8s 管理员指南

提供低百分比值

如果您提供一个低百分比值,类似 50 ,您允许索引中的增长。索引的节点最初填充到一定的百分比并为插入包含空间。可用空间的数量取决于每页中键的数量以及百分值。

例如,FILLFACTOR 值为 50%,页面将半满并能适应大小的加倍。低百分比值能导致更快的插入并能用于期望增长的索引。

提高百分比值

如果您提高百分比值,例如 99 ,则索引将是压缩的,并且任何新索引的插入将呆滞分割节点。密度的最大值是100% 。具有 100% 的 FILLFACTOR 值时,索引没有空间可用于增长;任何索引的添加都将导致分割节点。

99% 的 FILLFACTOR 值允许每个节点至少一个插入的空间。高百分比值可能产生更快的查询,并适合与您不希望增长的索引或大部分只读索引。

存储选项

存储选项指定索引的分布方案。您可使用 IN 子句来为整个索引指定存储空间,或者可使用 FRAGMENT BY 子句来在多个存储空间上分片索引。

存储选项

 

元素

描述

限制

语法

dbspace

存储索引的 dbspace

必须存在

标识符

extspace

由 onspaces 命令分配到数据库服务器外的存储区域的名称

必须存在

请参阅您的存取方法的文档。

如果您指定任何存储选项(除了 IN TABLE),您将创建一个拆离的索引。拆离索引是使用特定的分布模式创建的索引。即使为索引指定的分布模式与为表指定的相同,索引仍被认为要拆离。如果表的分布方案更改了,所有拆离的索引还将继续使用 Storage Option 子句指定的分布方案。

如果您不包含 Storage Option 子句,则缺省情况下在同一 dbspace 建立连接索引,并将其作为对应表的分片。然而,如果启用自动定位,则缺省情况下单个分片中循环表上建立的索引被拆离,并将其放置在服务器选择的 dbspace 中。通过设置 AUTOLOCATE 配置参数或者将会话环境变量选项设置为正整数来启用自动定位。

索引的 COMPRESSED 选项

如果索引拥有 2000 或更多的键,则可使用 CREATE INDEX 语句的 COMPRESSED 关键字压缩 B-tree 索引。

您可以在分片表或未分片表上创建压缩的索引。

您不能创建的压缩的索引是集群索引。然而,您可以通过运行带 index compress 参数的 SQL 管理 API task() 或 admin() 函数压缩现有的集群索引。

要被压缩,索引中的分片或索引必须具有至少 2000 个键。如果您在创建不具有足够多的键的索引时使用 COMPRESSED 选项,则数据库服务器在创建该索引时不会压缩该索引或分片。即使向该索引添加键,其仍然保持未压缩状态。如果您想要压缩该索引,则运行带 index compress 参数的 SQL 管理 API task() 或 admin() 函数。

如果表没有足够的数据来提供足够大的索引键样本,则数据库服务器不会压缩该索引或分片。即使将最小数量的新键添加到现有未压缩的索引中,数据库服务器仍不会压缩该索引。 然而,压缩索引后,数据库服务器压缩并插入任何新的键到该索引中。

以下示例在 customer 表的 address 列创建了一个名为 cust3_ix 的压缩的索引:

CREATE INDEX cust3_ix ON customer (address) COMPRESSED

          EXTENT SIZE 32 NEXT SIZE 32;

以下示例创建了一个唯一的压缩的索引:

CREATE UNIQUE INDEX cust3_ix ON customer (address) COMPRESSED ;

 

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

评论