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