3.3.1 인덱스 탐색
- 조건절의 선행조건의 범위를 좁혀줘야 후행조건의 범위 또한 더 좁혀질 수 있다
3.3.2 인덱스 스캔 효율
인덱스 스캔효율 ↑
- 인덱스에 컬럼을 추가한다
- 조건을 설정할 때 "ABC%" 는 괜찮지만 "%ABC"는 나쁘다 → 인덱스 검색의 시작점을 찾을 수 없기 때문에
- 선행 조건에 '='를 사용한다
3.3.3 액세스 조건과 필터 조건 ✨
- 등치조건을 앞에 둠으로써 인덱스 스캔 범위를 줄인다
- 인덱스를 스캔하는 단계에 처리하는 조건절
- 액세스 조건
- 인덱스 스캔 범위를 결정
- 필터조건
- 테이블로 액세스할지를 결정
- 테이블 필터조건
- 쿼리 수행 다음 단계로 전달하거나 최종 결과집합에 포함할지를 결정
- 액세스 조건
- 선행 컬럼이 모두 '=' 조건인 상태
- 첫 번째 나타나는 범위검색 조건까지만 만족하는 인덱스 레코드는 모두 연속해여 모여있다
- 그 이하 조건까지 만족하는 레코드는 비교 연산자 종류에 상관없이 흩어진다
3.3.6 Between 을 In-List로 전환
In-List 개수만큼 UNION ALL 브랜치가 생성되고 각 브랜치마다 모든 컬럼을 '=' 조건으로 검색하므로 Between을 사용할 때와 같은 비효율이 사라진다
1) 인터넷매물 between '1' and '3'
↓
2) 인터넷매물 in ('1','2','3')
↓
3) 인터넷매물 = '1' or 인터넷매물 = '2' or 인터넷매물 = '3'
- 1)에서 3)으로 한번에 변경은 불가능하지만 1)에서 2), 2)에서 3)은 가능하다
Between조건을 In-List로 전환할 때 주의 사항
- 인덱스에서 조건을 만족하는 레코드가 서로 멀리 떨어져 있을 때만 Between조건을 In-List로 전환하는 것이 유용
3.3.12 함수호출부하 해소를 위한 인덱스 구성
PL&SQL 사용자 정의 함수가 느린 이유
- 가상머신(VM) 상에서 실행되는 인터프리터 언어
- 호출 시마다 컨덱스트 스위칭 발생
- 내장 SQL에 대한 Recursive Call 발생
'SQL 튜닝 > Ch03 인덱스 튜닝' 카테고리의 다른 글
인덱스 설계(4) (0) | 2024.11.15 |
---|---|
테이블 액세스 최소화 (1) (0) | 2024.11.15 |