GBase 8s 提供多个类型的索引。一些性能问题与索引相关联。 8.1索引的类型 GBase 8s 使用 B 型树索引、R 型树索引、函数索引以及 DataBlade 模块为用户定义的 数据提供的索引。服务器还使用森林树 (FOT) 索引,这是 B 型树索引的替代项。
1 B 型树索引
GBase 8s 将 B 型树索引用于包含内置数据类型的列(称为传统 B 型树索 引),用于包含一维用户定义的数据类型的列(称为一般 B 型树索引),以及用 户定义的数据类型返回的值。 内置数据类型包括 character、datetime、integer 和 float 等。 用户定义的数据类型包括不透明和单值数据类型。 用户定义的函数的返回值可以是内置或用户定义的数据类型,但不是简单 大对象(TEXT 或 BYTE 数据类型)或智能大对象(BLOB 或 CLOB 数据类 型)。
1.1 常规索引页面的结构
一个索引所需要的层次数取决于该索引中唯一键的数量,以及每页所能包 含的索引条目的数量。 每页中条目的数量又取决于在上面建立索引的列的大小。 如果一个给定表的索引页能包含 100 个键,那么最多包含 100 行的表只 需要一个单层索引:根页。 如果该表增长到超过 100 行,在 101 和 10,000 行 之间,那么它需要两层索引:1 个根页和 2 到 100 个叶子页。 如果该表增长 到超过 10,000 行,其大小 在 10,001 行和 1,000,000 行之间,那么它需要三 层索引:根页、一组数量为 100 的枝叶以及最多可达 10,000 个的叶子页。 包含于叶子页中的索引条目按照键值顺序排序。 索引条目由键和一个或多 个行指针组成。 键就是一行数据的索引列的副本。 行指针提供地址,用于定 位包含该键的行。 唯一索引包含表中每行的一个索引条目。
2 森林树索引
森林树索引类似于 B 型树索引,但具有多个根节点,并且级别可能更少。 多个根节点可以缓解根节点争用情况,因为更多并发用户可以访问索引。森林树索引还可以通过减少缓冲区读操作中涉及的级别数,提高查询的性能。 您可以创建森林树索引作为 B 型树索引的替代项,但不能作为 R 型树索 引或其他类型索引的替代项。 与包含一个根节点的传统 B 型树索引不同,森林树索引相当于一个划分为 更小子树(可将其视为存储区)的大型 B 型树索引。这些子树包含多个根节点 和叶。下图显示森林树索引的结构。
森林树索引是分离索引。服务器不支持森林树连接索引。 使用 SQL 的 CREATE INDEX 语句和 HASH ON 子句来创建森林树索 引。 使用 SQL 的 SET INDEXES 语句来启用或禁用森林树索引。 可以根据 SET EXPLAIN 输出中 Index Name 字段的 FOT 指示符来标识森 林树索引。 通过在 sysindices 表内针对具有森林树索引的表查看其所属数据库的信息, 可以查找森林树索引中散列列和子树的数量。 服务器对待森林树索引的方式与对待 B 型树索引的方式相同。因此,在记 录的数据库中,您可以控制 B 型树扫描程序线程如何从森林树索引和 B 型树 索引除去删除。
限制:您不能执行以下操作:
• 对具有复杂数据类型 (UDT) 的列或功能列创建森林树索引。
• 在创建森林树索引时使用 CREATE INDEX 语句的 FILLFACTOR 选项(因为索引是从上到下进行构建的)。
• 创建集群森林树索引。
• 对森林树索引运行 ALTER INDEX 语句。
• 对集群环境内辅助服务器数据库中的森林树索引运行 SET INDEXES 语句。
• 在使用聚集的查询中使用森林树索引,包括最小和最大范围值。
• 直接对森林树索引的 HASH ON 列执行范围扫描。 不过,您可以对 HASH ON 列列表中未列出的列执行范围扫描。要对 HASH ON 列列表中列出的列执行范围扫描,必须额外创建一个 B 型 树索引,其中包含适合范围扫描的列列表。这一额外的 B 型树索引可 以具有与森林树索引相同的列列表,加上或减去一列。
• 对 OR 索引路径使用森林树索引。数据库服务器不会对索引列上具 有 OR 谓词的查询使用森林树索引。



