레코드 배열 정의가 들어 있는 테이블을 맵핑할 때, 쿼리의 결과 세트가 성능에 영향을 줄 만큼 많은 행을 리턴할 수 있습니다.
테이블에 배열로서 맵핑하는 복수의 레코드 배열 정의가 있을 때 해당 테이블을 참조하는 쿼리는 큰 결과 세트를 생성합니다. 성능 문제점을 방지하려면 다음 중 하나를 수행하십시오.
각 배열에 대해 별도의 테이블을 맵핑하는 경우 페더레이티드 쿼리가 데이터를 읽을 수 있습니다. 구조를 평탄화하면 클라이언트 응용프로그램이 행을 삽입, 갱신 및 삭제할 수 있습니다.
레코드 배열 정의를 배열로서 맵핑할 때 Classic Data Architect가 데이터 정의를 SQL 컬럼으로 변환합니다. 배열의 각 인스턴스는 배열이 아닌 데이터 항목과 결합하여 SQL 행을 작성합니다. 예를 들어 직원 ID 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절에 필터링 술어를 제공하기 전에 공식을 사용하여 배열이 들어 있는 테이블에 대한 쿼리의 결과 세트에 있는 행 수를 계산할 수 있습니다. 결과 세트의 행 수는 다음 항목의 데카르트 곱입니다.
<각 레코드 배열의 인스턴스 수> * <실제 레코드 수>
가변 길이 배열의 경우 각 배열에 대해 존재하는 인스턴스 수를 모르는 경우 결과 세트의 행 수를 계산할 수 없습니다.
다음 예는 다중 배열이 큰 결과 세트로부터 발생하는 성능 문제점을 유발할 수 있는 방식을 보여줍니다.
쿼리는 각 직원에 대해 4 * 2 * 3 = 24행을 생성하고 결과 세트에 24 * 200 = 4800행을 생성합니다.
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개의 전문 조직을 갖습니다. 쿼리는 해당 직원에 대해 4 * 2 = 8행을 생성합니다.