📜  IMS DB-二级索引

📅  最后修改于: 2020-11-27 05:22:08             🧑  作者: Mango


当我们要访问数据库而不使用完整的串联键时,或者当我们不想使用序列主字段时,将使用辅助索引。

索引指针段

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名称。