HASH ON 子句

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

HASH ON 子句
元素 描述 限制 语法
column 您使用 HASH ON 子句创建森林树索引的列或列组的名称 该列表必须是在 CREATE INDEX 语句中使用的索引列的前缀列表。 标识符
number 要创建森林树索引所需的子树(存储区)数 森林树索引的存储区数必须在 2 到每个 dbspace 可用索引页数之间。 整数文字

用法

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

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

您不能:

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

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

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

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

要将 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 部分的前缀列表是 c1c2,它是在该语句的 CREATE INDEX 部分中使用的 c1c2c3 列的前缀列表:

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);