WebSphere 徽标 Classic Federation Server for z/OS V9.1
WebSphere 徽标 Classic Replication Server for z/OS V9.1
WebSphere 徽标 Classic Data Event Publisher for z/OS V9.1
WebSphere 徽标 Data Integration Classic Connector for z/OS V9.1


多个记录数组的性能注意事项

映射包含记录数组定义的表时,查询产生的结果集返回的行可能非常多,以致使性能受到影响。

当表包含多个映射为数组的记录数组定义时,引用该表的查询将产生较大的结果集。要避免出现性能问题,请执行下列其中一项操作:

如果对每个数组映射一个单独的表,那么联合查询可以读取数据。如果使结构变成平面结构,那么客户机应用程序可以插入、更新和删除行。

将记录数组定义映射为数组时,Classic Data Architect 会将数据定义转换为 SQL 列。将每个数组实例与非数组数据项组合在一起创建 SQL 行。例如,如果数据库中对应职员标识 123456789 的记录包含三个家属,那么会对该记录返回三个不同的行。以下查询在结果集中返回三行:

查询:

SELECT EMP_ID, NUMBER_OF_DEPENDENTS, DEP_ID, DEP_NAME FROM
CAC.EMPL WHERE EMP_ID = '123456789';
结果集:
EMP_ID    NUMBER_OF_DEPENDENTS  DEP_ID    DEP_NAME
123456789        3              111223333 Depen1
123456789        3              222334444 Depen2
123456789        3              333445555 Depen3

计算结果集的大小

在 WHERE 子句中提供任何过滤谓词之前,可以使用公式来计算对包含数组的表执行查询所产生的结果集中的行数。结果集中的行数是下列项的笛卡尔乘积:

<每个记录数组中的实例数> * <物理记录数>

对于可变长度数组,除非您知道每个数组存在多少个实例,否则不能计算结果集中的行数。

示例

以下示例说明多个数组如何导致由于较大的结果集而产生的性能问题。

  1. 职员具有下列数据项:
    • 四个家属
    • 两个紧急联系人
    • 三项任务
  2. 数据库包含 200 个职员记录

查询对每个职员生成 4 * 2 * 3 = 24 行,因此结果集中将生成 24 * 200 = 4800 行。

在下一个示例中,COBOL 副本有两个 OCCURS 子句,它们定义包含关于家属和专业组织的数据的数组:
  01  EMPLOYEE-RECORD.
      ...
      05  DEPENDENTS-ARRAY OCCURS 20 TIMES.
      ...
      05  ORGS-ARRAY OCCURS 5 TIMES PIC X(10).

如果使用 Classic Data Architect 中的“新建表”向导来为此记录布局创建表定义,并且将两个数组映射至同一个表,那么单个职员记录的结果集是 DEPENDENTS-ARRAY 和 ORGS-ARRAY 的笛卡尔乘积。

查询处理器不返回 NULL 数组实例。在此示例中,职员有四个家属和两个专业组织。查询将对该职员生成 4 * 2 = 8 行。

相关概念
记录数组
联合和更改捕获的记录数组定义
相关任务
在表定义中对每个记录数组创建一个单独的表
相关参考
数组定义示例
相关信息
映射用于经典联合的数据
映射用于更改捕获的数据


反馈

更新时间图标 最近一次更新时间:2007 年 7 月 11 日