2012-11-18 3 views
0

IBM DB2에 대해 학습 중이며 액세스 유형에 대한 질문이 있습니다.DB2 IN 목록 액세스, 인덱스 스캔, TS 스캔

나는 쿼리에서 IN-list 액세스, 인덱스 스캔, TS 스캔을 결정하는 방법을 잘 모르겠습니다.

예를 들어, 우리는 쿼리 IN 문을 포함하기 때문에

SELECT * FROM T 
WHERE C1=1 AND C2 IN (1,2,3) 
    AND C3>0 AND C4<100; 

그런 다음, 그것은 IN-목록 액세스 될 수 있습니다. 그러나 색인이있는 경우 C1 및 C3 또는 색인 스캔 일 수 있습니다. 이 쿼리가 "IN 목록 액세스"라고해야하는 이유는 무엇입니까?

인덱스 스캔 및 TS 스캔의 예를 들어 주시겠습니까?

은 정말이 부분

답변

1

에게 EXPLAIN PLAN의 출력을 얻을 수 있습니다 당신이 얻을 액세스 경로의 종류를 알 수있는 유일한 방법을 이해하지 않습니다. 쿼리 (사용 가능한 인덱스, 열 카디널리티 등을 알지 못함)를 볼 수없고 옵티마이 저가 수행 할 작업을 확실히 알 수 없습니다.

DB2의 옵티 마이저는 비용 기반이며 CPU, 디스크 액세스 및 메모리 측면에서 가장 효율적으로 계산되는 액세스 플랜을 선택합니다. EXPLAIN PLAN 또는 Visual Explain 도구를 사용하면 옵티마이 저가 선택하는 것을 볼 수 있습니다.

+1

DB2의 쿼리 최적화 프로그램에서 사용하는 원가 계산 정보의 소스가 실제 테이블과 인덱스가 아니라 RUNSTATS 유틸리티로 생성 된 통계 요약임을 추가하고자합니다. 이는 RUNSTATS가 다시 실행될 때까지 테이블에 대한 주요 변경 사항 (예 : 큰 DELETE 또는 INSERT)이 조회 Optimizer에 의해 감지되지 않을 수 있음을 의미합니다. 일부 DB2 플 '폼에서 데이터베이스 엔진은 이러한 유형의 변경을 감시하고 RUNSTATS를 자동으로 실행하여 테이블 및 해당 인덱스에 대한 새로운 통계 스 냄샷을 생성합니다. –