database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
ㆍDB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
DB2 Q&A 1013 게시물 읽기
No. 1013
OPTIMIZE FOR 10 ROWS 이게 무었인지?
작성자
미리내(jaguar72)
작성일
2006-06-02 17:49
조회수
8,446

안녕하세요...

쿼리를 구성할때 아래와 같은 줄을 삽입해서 한 것이 있더라구요

OPTIMIZE FOR 10 ROWS

 

간략하게 어떤 역할을 하는지 속도 개선하고 상관있는 지 알려주세요...

 

그럼 즐거운 하루하루가 되세요

I
이 글에 대한 댓글이 총 2건 있습니다.

메뉴얼에 나오는 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를 사용할 경우, 액세스 경로에 영향을 줄 가능성이 가장 높습니다. 이 절을 사용하면 다음과 같은 효과가 있습니다.

  • 복합 내부가 있는 조인 시퀀스는 임시 테이블이 필요하므로 가능성이 줄어듭니다.
  • 조인 메소드가 변경될 수도 있습니다. 중첩 루프 조인은 오버헤드 비용이 낮고 주로 몇 개의 행을 검색하는 데 더욱 효과적이므로 선택 가능성이 가장 높습니다.
  • ORDER BY에 필요한 정렬이 없으므로 ORDER BY절에 일치하는 인덱스가 선택될 가능성이 더 높습니다.
  • 이 액세스 메소드에는 정렬이 필요하므로 리스트 프리페치가 선택될 가능성이 줄어듭니다.
  • 적은 수의 행만이 필요함을 이해하게 되어 시퀀스 프리페치가 선택될 가능성이 줄어듭니다.
  • 조인 쿼리에서는 ORDER BY절에 필요한 순서화를 제공하는 인덱스가 외부 테이블에 있을 경우, ORDER BY절의 컬럼을 가진 테이블이 외부 테이블로서 선택되기 쉽습니다.

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절을 모두 지정할 경우, 두 값 중 더 적은 값이 통신 버퍼 크기에 영향을 미칩니다. 최적화를 위해 두 값은 각각 서로 별개인 것으로 간주됩니다.

brahman님이 2006-06-04 00:11에 작성한 댓글입니다. Edit

고맙습니다...

 

미리내(jaguar72)님이 2006-06-07 22:39에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
1016일정시간 접속이 없으면 죽어요.. [1]
강성경
2006-06-12
6471
1015RAC? hot standby? [1]
김민영
2006-06-08
7574
1014os/390 6.1에서 가상 뷰를 만들수 있나요?
미리내
2006-06-08
6364
1013OPTIMIZE FOR 10 ROWS 이게 무었인지? [2]
미리내
2006-06-02
8446
1012db2 os/390 v6관련 매뉴얼 구합니다. [2]
미리내
2006-05-31
7306
1011DB2 6.1버전에 대해서 궁금합니다... [2]
미리내
2006-05-30
6992
1010SQL0304N 에러에 대해서 질문드립니다.
db2
2006-05-29
7825
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다