IMS DB - 二级索引
当我们想要访问数据库而不使用完整的连接键或者当我们不想使用序列主字段时,使用辅助索引。
索引指针段
DL/I 将指向索引数据库段的指针存储在单独的数据库中。索引指针段是唯一的二级索引类型。它由两部分组成 -
- 前缀元素
- 数据元素
前缀元素
索引指针段的前缀部分包含指向索引目标段的指针。索引目标段是可以使用二级索引访问的段。
数据元素
数据元素包含来自构建索引的索引数据库中的段的键值。这也称为索引源段。
以下是二级索引需要注意的要点 -
索引源段和目标源段不必相同。
当我们设置二级索引时,它由DL/I自动维护。
DBA根据多种访问路径定义了许多二级索引。这些二级索引存储在单独的索引数据库中。
我们不应该创建更多的二级索引,因为它们会给 DL/I 带来额外的处理开销。
辅助键
注意事项 -
索引源段中建立二级索引的字段称为二级键。
任何字段都可以用作辅助键。它不必是段序列字段。
辅助键可以是索引源段中单个字段的任意组合。
辅助键值不必是唯一的。
二级数据结构
注意事项 -
当我们建立二级索引时,数据库的明显层次结构也发生了变化。
索引目标段成为表观根段。如下图所示,工程段成为根段,即使它不是根段。
由二级索引引起的数据库结构的重新排列称为二级数据结构。
辅助数据结构不会对磁盘上存在的主要物理数据库结构进行任何更改。它只是在应用程序之前改变数据库结构的一种方法。
独立的 AND 运算符
注意事项 -
当 AND(* 或 &)运算符与二级索引一起使用时,称为从属 AND 运算符。
独立 AND (#) 允许我们指定使用从属 AND 不可能实现的限定条件。
该运算符只能用于索引源段依赖于索引目标段的二级索引。
我们可以使用独立的 AND 来编码 SSA,以指定根据两个或多个相关源片段中的字段来处理目标片段的出现。
01 ITEM-SELECTION-SSA. 05 FILLER PIC X(8). 05 FILLER PIC X(1) VALUE '('. 05 FILLER PIC X(10). 05 SSA-KEY-1 PIC X(8). 05 FILLER PIC X VALUE '#'. 05 FILLER PIC X(10). 05 SSA-KEY-2 PIC X(8). 05 FILLER PIC X VALUE ')'.
稀疏测序
注意事项 -
稀疏排序也称为稀疏索引。我们可以使用二级索引数据库的稀疏排序从索引中删除一些索引源段。
稀疏排序用于提高性能。当索引源段的某些出现未被使用时,我们可以将其删除。
DL/I 使用抑制值或抑制例程或两者来确定是否应为段建立索引。
如果索引源段中的序列字段的值与抑制值匹配,则不建立索引关系。
抑制例程是一个用户编写的程序,用于评估段并确定是否应对其进行索引。
当使用稀疏索引时,其功能由 DL/I 处理。我们不需要在应用程序中对此做出特殊规定。
DBDGEN 要求
正如前面模块中所讨论的,DBDGEN 用于创建 DBD。当我们创建二级索引时,会涉及到两个数据库。DBA 需要使用两个 DBDGEN 创建两个 DBD,以创建索引数据库和辅助索引数据库之间的关系。
PSBGEN 要求
为数据库创建二级索引后,DBA 需要创建 PSB。程序的 PSBGEN 在 PSB 宏的 PROCSEQ 参数上指定数据库的正确处理顺序。对于PROCSEQ参数,DBA对二级索引数据库的DBD名称进行编码。