- IMS DB 基础教程
- IMS DB - 首页
- IMS DB - 概述
- IMS DB - 结构
- IMS DB - DL/I 术语
- IMS DB - DL/I 处理
- IMS DB - 控制块
- IMS DB - 编程
- IMS DB - Cobol 基础
- IMS DB - DL/I 函数
- IMS DB - PCB 掩码
- IMS DB - SSA
- IMS DB - 数据检索
- IMS DB - 数据操作
- IMS DB - 二级索引
- IMS DB - 逻辑数据库
- IMS DB - 恢复
- IMS DB 有用资源
- IMS DB - 问题与解答
- IMS DB - 快速指南
- IMS DB - 有用资源
IMS DB - 二级索引
当我们想要访问数据库而不使用完整的连接键,或者不想使用顺序主字段时,使用二级索引。
索引指针段
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 名称进行编码。