IMS DB - 二级索引
当我们想要在不使用完整连接键的情况下访问数据库,或者当我们不想使用序列主字段时,就会使用二级索引。
索引指针段
DL/I 将指向索引数据库段的指针存储在单独的数据库中。索引指针段是唯一的二级索引类型。它由两部分组成 −
- 前缀元素
- 数据元素
前缀元素
索引指针段的前缀部分包含指向索引目标段的指针。索引目标段是可使用二级索引访问的段。
数据元素
数据元素包含索引数据库中建立索引的段的键值。这也称为索引源段。
以下是关于二级索引需要注意的要点 −
索引源段和目标源段不必相同。
当我们设置二级索引时,它由 DL/I 自动维护。
DBA 根据多条访问路径定义多个二级索引。这些二级索引存储在单独的索引数据库中。
我们不应该创建更多的二级索引,因为它们会给 DL/I 带来额外的处理开销。
二级键
注意事项 −
索引源段中构建二级索引的字段称为二级键。
任何字段都可以用作二级键。它不必是段序列字段。
辅助键可以是索引源段内单个字段的任意组合。
辅助键值不必是唯一的。
辅助数据结构
注意事项 −
当我们建立辅助索引时,数据库的表观层次结构也会发生变化。
索引目标段成为表观根段。如下图所示,工程段成为根段,即使它不是根段。
由二级索引引起的数据库结构的重新排列称为二级数据结构。
二级数据结构不会对磁盘上存在的主要物理数据库结构进行任何更改。它只是一种在应用程序前面改变数据库结构的方法。
![secondary data structure](/ims_db/images/secondary_data_structure.png)
独立 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 名称。