간단명료
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/rPaT9/btruLtdNmm1/UG9rZn8lHavBMlyrmWMsK1/img.jpg)
3.3.1 인덱스 탐색 2.1(.2)(https://gyujingyujin.tistory.com/14?category=1262761) 참고 (page173 예시 참고) 3.3.2 인덱스 스캔 효율성 (page180 예시 참고) 3.3.3 액세스 조건과 필터 조건 인덱스 액세스 조건 인덱스 스캔 범위를 결정하는 조건절. 인덱스 수직적 탐색을 통해 스캔 시작점을 결정하는데 영향을 미치고, 인덱스 리프 블록을 스캔하다가 어디서 멈출지 결정한다. 인덱스 필터 조건 테이블로 액세스할지를 결정하는 조건절. 테이블 필터 조건 쿼리 수행 다음 단계로 전달하거나 최종 결과집합에 포할할지를 결정한다. 인덱스를 이용한 테이블 액세스 비용 = 인덱스 수직적 탐색 비용 + 인덱스 수평적 탐색 비용 + 테이블 랜덤 액세스 비용 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ZYBBC/btruIT42dMm/mNBUDYRjpeg8IK9BcI1M81/img.jpg)
부분범위 처리를 활용하면 인덱스로 액세스할 대상 레코드가 아무리 많아도 아주 빠른 응답속도를 낼 수 있다. 3.2.1 부분범위 처리 DBMS가 데이터를 모두 읽어 한 번에 전송하지 않고 먼저 읽는 데이터부터 일정량(Array Size) 을 전송하고 멈추기 때문에 레코드가 아무리 많아도 빨리 출력할 수 있다. 데이터를 전송하고 나면 서버 프로세스는 CPU를 OS에 반환하고 대기 큐에서 잠을 잔다. 다음 Fetch Call을 받으면 대기 큐에서 나와 그다음 데이터부터 일정량을 읽어서 전송하고 또다시 잠을 잔다. 이처럼 전체 쿼리 결과집합을 쉼 없이 연속적으로 전송하지 않고 사용자로부터 Fetch Call이 있을 때마다 일정량씩 나누어 전송하는 것을 '부분범위 처리' 라고 한다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/wg07f/btruDB5rS73/BK0uKtfcMc6lVhhXBm06YK/img.jpg)
3.1.1 테이블 랜덤 액세스 인덱스 ROWID는 물리적 주소? 논리적 주소? 인덱스 스캔 후 반드시 테이블을 액세스하는데 실행계획에서 'TABLE ACCESS BY INDEX ROWID' 표시 부분이 여기에 해당된다. SQL> from 고객 where 지역 = '서울'; Excution PLan -------------------------------------------------------------------------------------------- 0 SELECT STATEMENT Optimizer=ALL_ROWS 1 0 TABLE ACCESS BY INDEX ROWID OF '고객' (TABLE) 2 1 INDEX RANGE OF '고객_지역_IDX' (INDEX) 인덱스 ROWID는 메모..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Y5N8d/btruc7WMaXX/1j7ti0es4AR6rcY5Fu2KK0/img.jpg)
2.3.1 Index Range Scan B-Tree 인덱스의 가장 일반적이고 정상적인 형태의 액세스 방식. 선두 컬럼을 가공하지 않은 상태로 조건절에 사용한다면 무조건 Index Range Scan 한다. 성능은 인덱스 스캔 범위, 테이블 액세스 횟수를 얼마나 줄일 수 있느냐로 결정된다. 2.3.2 Index Full Scan 수직적 탐색 없이 리프 블록을 처음부터 끝까지 수평적으로 탐색하는 방법. 대개 최적의 인덱스가 없을 때 차선으로 선택된다. Inex Full Scan의 효용성 인덱스를 레인지 스캔할 수 없을 때 대용량 테이블이어서 Table Full Scan하기에 부담이 크다면 옵티마이저는 Index Full Scan 방식을 선택한다. 인덱스를 Full Scan 하면 Range Scan과 마찬가..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bphEr3/btrtYVD1z9h/mqJLRbFJ7GSfEsqptkEJf1/img.jpg)
2.2.1 인덱스를 사용한다는 것 인덱스 기본 사용법은 인덱스를 Range Scan 하는 방법을 의미한다. 인덱스 컬럼(정확히 선두컬럼)을 가공하지 않아야 인덱스를 정상적으로 사용할 수 있다. 정상적으로 사용하지 못할 경우 전체를 스캔하는 Index Full Scan 방식으로 작동한다. 2.2.2 인덱스 가공 시 Range Scan 할 수 없는 이유 인덱스를 가공했을 때 인덱스를 정상적으로 사용할 수 없는 이유는 인덱스의 시작점을 찾을 수 없기 때문이다 where substr(생년월일, 5, 2) = '05' where nvl(주문수량, 0) < 100 where 업체명 like '%대한%' where (전화번호 = :tel_no OR 고객명 = :cust_nm) : OR Expansion 을 통해 옵티..