IMS DB - 二级索引

当我们想要在不使用完整的连接键的情况下访问数据库或者我们不想使用序列主要字段时,使用二级索引.

索引指针段

DL/I将指针存储在单独数据库中的索引数据库的段中.索引指针段是唯一的二级索引类型.它由两部分组成 :

  • 前缀元素

  • 数据元素

前缀元素

索引指针段的前缀部分包含指向索引目标段的指针.索引目标段是可使用二级索引访问的段.

数据元素

数据元素包含来自段中的键值构建索引的索引数据库.这也称为索引源片段.

以下是关于二级索引的关键点;

  • 索引源段和目标源段不必相同.

  • 当我们设置二级索引时,它由DL/I自动维护.

  • DBA根据多个访问路径定义了许多二级索引.这些二级索引存储在单独的索引数据库中.

  • 我们不应该创建更多的二级索引,因为它们会对DL/I施加额外的处理开销./p>

二级钥匙

注意事项:

  • 构建二级索引的索引源段中的字段称为辅助键.

  • 任何字段都可以用作辅助密钥.它不一定是段序列字段.

  • 辅助键可以是索引源段中单个字段的任意组合.

  • 辅助键值不必是唯一的.

辅助数据结构

要点注意:

  • 当我们构建二级索引时,明显的层次结构数据库也发生了变化.

  • 索引目标段成为明显的根段.如下图所示,工程段成为根段,即使它不是根段.

  • 由数据库结构重新排列引起的辅助索引称为辅助数据结构.

  • 辅助数据结构不会对磁盘上存在的主物理数据库结构进行任何更改.它只是一种在应用程序前改变数据库结构的方法.

辅助数据结构

独立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使用抑制值或抑制例程或两者来确定是否应对段进行索引.

  • 如果索引源段中的序列字段的值与抑制值匹配,则不会建立索引关系./p>

  • 抑制例程是一个用户编写的程序,用于评估段并确定是否应对其进行索引.

  • 使用稀疏索引时,其功能由DL/I处理.我们不需要在申请程序中为此做出特殊规定.

DBDGEN要求

如前面的模块中所述,DBDGEN用于创建DBD.当我们创建二级索引时,涉及两个数据库. DBA需要使用两个DBDGEN创建两个DBD,用于在索引数据库和二级索引数据库之间创建关系.

PSBGEN要求

创建后DBA需要创建PSB,这是数据库的二级索引.该程序的PSBGEN为PSB宏的PROCSEQ参数指定数据库的正确处理顺序.对于PROCSEQ参数,DBA对辅助索引数据库的DBD名称进行编码.