안녕하세요...
쿼리를 구성할때 아래와 같은 줄을 삽입해서 한 것이 있더라구요
OPTIMIZE FOR 10 ROWS
간략하게 어떤 역할을 하는지 속도 개선하고 상관있는 지 알려주세요...
그럼 즐거운 하루하루가 되세요
메뉴얼에 나오는 OPTIMIZE FOR n ROWS절에 대한 설명입니다.
OPTIMIZE FOR n ROWS절
OPTIMIZE FOR절은 결과의 서브세트만을 검색하거나 첫 번째 몇 행의 검색에 우선순위를 부여하는 의도를 선언합니다. 그런 다음, 옵티마이저는 첫 번째 몇 행 검색에 대한 응답 시간을 최소화하는 액세스 플랜에 우선권을 줄 수 있습니다. 또한 단일 블록으로서 클라이언트에 전송된 행의 수는 OPTIMIZE FOR절의 『n』 값에 의해 바인드됩니다. 그러므로 OPTIMIZE FOR절은 서버가 데이터베이스에서 규정 행을 검색하는 방법과 규정 행이 클라이언트로 리턴되는 방법에 모두 영향을 미칩니다.
예를 들어, 정기적으로 높은 급료를 받는 사원에 대한 사원 테이블을 쿼리한다고 가정해 보십시오.
SELECT LASTNAME,FIRSTNAME,EMPNO,SALARY FROM EMPLOYEE ORDER BY SALARY DESC
SALARY 컬럼에서 내림차순의 인덱스를 정의하였습니다. 그러나 사원의 순서가 사원 번호에 의해 결정되므로, 급료 인덱스가 매우 부적절하게 클러스터될 가능성이 높습니다. 많은 임의의 동기 입출력을 피하려면, 옵티마이저는 규정하는 모든 행 ID가 정렬되어야 하는 리스트 프리페치 액세스 메소드를 사용하도록 선택합니다. 이 정렬은 첫 번째 규정 행이 응용프로그램으로 리턴되기 전에 지연을 초래할 수 있습니다. 이 지연을 막으려면, 다음과 같이 명령문에 OPTIMIZE FOR절을 추가하십시오.
SELECT LASTNAME,FIRSTNAME,EMPNO,SALARY FROM EMPLOYEE ORDER BY SALARY DESC OPTIMIZE FOR 20 ROWS
이 경우, 옵티마이저는 최고의 급료를 받는 20명의 사원만이 검색되기 때문에 SALARY 인덱스를 직접 사용하도록 선택합니다. 블로킹 가능한 행 수에 관계없이 20행마다 한 개의 행 블록이 클라이언트로 리턴됩니다.
OPTIMIZE FOR절을 사용하면 옵티마이저는 정렬과 같은 행의 플로우를 방해하는 조작 또는 인터럽트를 막는 액세스 플랜을 지원합니다. OPTIMIZE FOR 1 ROW를 사용할 경우, 액세스 경로에 영향을 줄 가능성이 가장 높습니다. 이 절을 사용하면 다음과 같은 효과가 있습니다.
OPTIMIZE FOR절이 모든 최적화 클래스에 적용되더라도, 3 미만의 클래스가 Greedy 조인 열거 메소드를 사용하므로 최적화 클래스 3 이상에 대해 최적으로 작용합니다. 이 메소드는 처음 몇 행의 신속한 검색에는 도움이 되지 않는 다중 테이블 조인용 액세스 플랜을 생성합니다.
OPTIMIZE FOR절은 모든 규정 행의 검색을 막지 않습니다. 모든 규정 행을 검색하는 경우, 전체 경과 시간은 옵티마이저가 전체 응답 세트를 최적화하는 데 걸린 시간보다 오래 걸릴 수가 있습니다.
패키지된 응용프로그램이 호출 레벨 인터페이스(DB2 CLI 또는 ODBC)를 사용하는 경우, db2cli.ini 구성 파일의 OPTIMIZEFORNROWS 키워드를 사용하여 DB2 CLI가 자동으로 각 쿼리 명령문 끝에 OPTIMIZE FOR절을 추가하도록 할 수 있습니다.
데이터가 별칭에서 선택되는 경우, 결과는 데이터 소스 지원에 따라 다를 수 있습니다. 별칭으로 참조되는 데이터 소스가 OPTIMIZE FOR절을 지원하고 DB2 옵티마이저가 전체 쿼리를 데이터소스로 푸시다운하면 절은 리모트 SQL로 생성되어 데이터 소스로 전송됩니다. 데이터 소스가 이 절을 지원하지 않거나 옵티마이저가 최소 비용을 로컬로 실행하기로 결정한 경우, OPTIMIZE FOR절은 로컬로 적용됩니다. 이 경우, DB2 옵티마이저는 액세스 플랜에 쿼리의 처음 몇 행을 검색할 때 걸리는 응답 시간을 최소화하는 선호하며, 플랜 작성시 옵티마이저에 사용 가능한 옵션은 한계가 있으며, OPTIMIZE FOR절로부터 얻은 성능은 대단하지 않습니다.
FETCH FIRST절과 OPTIMIZE FOR절을 모두 지정할 경우, 두 값 중 더 적은 값이 통신 버퍼 크기에 영향을 미칩니다. 최적화를 위해 두 값은 각각 서로 별개인 것으로 간주됩니다.
고맙습니다...