간단명료

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과 마찬가..

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 을 통해 옵티..

2.1.1 미리 보는 인덱스 튜닝 데이터를 찾는 두 가지 방법 테이블 전체를 스캔한다. (모든 교실을 돌며 학생을 찾는다.) 인데스를 이용한다. (이름순으로 정렬한 학생부를 이용하여 학생을 찾는다.) 인덱스 튜닝의 두 가지 핵심요소 인덱스는 큰 테이블에서 소량 데이터를 검색할 때 사용한다. 온라인 트랜잭션 처리(Online Transaction Proccessing, 이하 'OLTP') 시스템에서는 소량 데이터를 주로 검색하므로 인덱스 튜닝이 무엇보다 중요하다. 인데스 스캔 효율화 튜닝 (인덱스 스캔 과정에서 발생하는 비효율을 줄이는 것) : 인덱스 스캔 순서에 따라 스캔하는 양이 달라진다. 랜덤 액세스 최소화 튜닝 (테이블 액세스 횟수를 줄이는 것)★ : 인덱스 스캔 후 테이블 레코드를 액세스할 때 랜..

I/O 튜닝이 곧 SQL 튜닝이라고 해도 과언이 아니다. 1.3.1 SQL이 느린 이유 SQL이 느린 이유는 디스크 I/O 때문이다. 프로세스는 실행 중인 프로그램이며, 생명주기를 갖는다. 실행 중인 프로세스는 interrupt에 의해 수시로 실행 준비 상태(Runnable Queue)로 전환했다가 다시 실행 상태로 전환한다. 프로세스가 일하고 있을 때 디스크 I/O가 발생하면 CPU를 OS에 반환하고 잠시 수면(Wating) 상태에서 I/O가 완료되길 기다린다. 결국, 수 많은 프로세스에 의해 발생한 디스크 I/O 때문에 경합이 심해지고 그만큼 대기 시간도 늘어난다. 1.3.2 데이터베이스 저장 구조 테이블스페이스 : 세그먼트를 담는 콘테이너, 여러 개의 데이터파일(디스크 상의 물리적인 OS파일)로 구..

바인드 변수가 왜 중요한지 이해하자! 1.2.1 소프트 파싱 vs 하드 파싱 SQL 파싱, 최적화, 로우 소스 생성 과정을 거쳐 생성한 내부 프로시저를 반복 재사용할 수 있도록 캐싱해 두는 메모리 공간을 라이브러리 캐시(Library Cache)라고 한다. 라이브러리 캐시는 SGA(System Global Area)의 구성요소 이며 서버 프로세스와 백그라운드 프로세스가 공통으로 액세스하는 데이터와 제어 구조를 캐싱하는 메모리 공간이다. 소프트 파싱(Soft Parsing) : SQL을 캐시에서 찾아 곧바로 실행단계로 넘어가는 것 하드 파싱(Hard Parsing) : SQL 찾는 데 실패해 최적화 및 로우 소스 생성 단계까지 모두 거치는 것 SQL 최적화 과정은 왜 하드(Hard)한가 SQL 옵티마이저는..