인덱스 기본 사용법을 알아야 튜닝도 가능하다.
인덱스 기본 사용법은 인덱스를 Range Scan하는 방법을 의미한다.
2.2.1 인덱스를 사용한다는 것
인덱스 컬럼(선두 컬럼)을 가공하지 않아야 인덱스를 정상적으로 사용할 수 있다.
인덱스 컬럼을 가공하면 일부가 아닌 전체를 스캔하는 Index Full Scan 방식으로 작동한다.
2.2.2 인덱스를 Range Scan 할 수 없는 이유
인덱스 컬럼을 가공하면 인덱스를 정상적으로 사용(Range Scan) 할 수 없다.
인덱스 컬럼을 가공했을 때 인덱스를 정상적으로 사용할 수 없는 이유는 인덱스 스캔 시작점을 찾을 수 없기 때문이다.
Index Range Scan에서 Range는 범위를 의미한다. 즉 Index Range Scan은 인덱스에서 일정 범위를 스캔하는건데 그러려면 '시작지점'과 '끝지점'이 있어야한다. ex) or, Like 등등
OR Expansion과 같은 최적화 방법을 통해, Range Scan이 가능하도록 쿼리를 변환할 수 있다.
정리해보면 인덱스를 정상적으로 사용한다는 표현은 리프 블록에서 스캔 시작점을 찾아 거기서 부터 스캔하다가 중간에 멈추는 것을 의미한다.
2.2.3 더 중요한 인덱스 사용 조건
인덱스를 Range Scan 하기 위한 가장 첫 번째 조건은 인덱스 선두 컬럼이 가공하지 않은 상태로 조건절에 있어야한다.
반대로 말해 인덱스 선두 컬럼이 가공 되지 않은 상태로 조건절에 있으면 인덱스 Range Scan은 무조건 가능하다. 문제는 인덱스를 Range Scan 한다고 해서 항상 성능이 좋은건 아니다.
인덱스 잘 타니까 튜닝 끝?
조건을 만족해 스캔된 양이 백만건이면 인덱스 를 잘 탔다고 말할 수 있을까?
2.2.4 인덱스를 이용한 소트 연산 생략
인덱스를 Range Scan할 수 있는 이유는 테이블과 달리 데이터가 정렬돼 있기 때문이다. 그러기에 Range Scan 뿐만 아니라 소트 연산 생략 효과도 부수적으로 얻게 된다.
2.2.5 ORDER BY절에서 컬럼 가공
조건절이 아닌 ORDER BY 또는 SELECT-LIST에서 컬럼을 가공함으로 인해 인덱스를 사용할 수 없는 경우도 종종 있다.
2.2.6 SELECT-LIST에서 컬럼 가공
2.2.7 자동 형변환
자동형변환 우선순위 외워야함
'도서(Book) > 친절한 SQL 튜닝' 카테고리의 다른 글
3. 인덱스 튜닝 - a. 테이블 액세스 최소화 (0) | 2024.11.08 |
---|---|
2. 인덱스 기본 - c. 인덱스 확장기능 사용법 (0) | 2024.11.08 |
2. 인덱스 기본 - a. 인덱스 구조 및 탐색 (0) | 2024.11.08 |
1. SQL 처리과정과 I/O - c. 데이터 저장 구조 및 I/O 메커니즘 (1) | 2024.11.08 |
1. SQL 처리과정과 I/O - b. SQL 공유 및 재사용 (0) | 2024.11.08 |