| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 독후감
- 인터페이스
- jface
- 이펙티브
- JPA
- kibana
- 알고리즘
- javascript
- node
- Git
- 리뷰
- RCP
- nodejs
- 맛집
- 후기
- 자바
- Spring
- java8
- error
- 엘라스틱서치
- effective
- 스프링
- java
- 백준
- Web
- Spring Boot
- elasticsearch
- boot
- MySQL
- 자바스크립트
Archives
- Today
- Total
wedul
SELECT-LIST 컬럼 가공시 정렬연산 수행 확인 및 개선방법 본문
반응형
인덱스가 Id, ch_date, ch_order 순으로 생성되어 있을 경우 MIN 값을 구해도 별도의 정렬연산을 수행하지 않는다. 수직적 탐색을 통해서 가장 왼쪽지점에서 보는 최소 값이 바로 구하고자 하는 값이기 때문이다.
1 | SELECT MIN(ch_date) FROM scott.SORT_TEST WHERE ID = ‘C’; | cs |
MAX의 경우도 마찬가지이다. MIN과 다른 점은 왼쪽에서 찾는게 아니라 가장 오른쪽에 있는 데이터를 찾는다는 점이다.
1 | SELECT MAX(ch_date) FROM scott.SORT_TEST WHERE ID = ‘C’; | cs |
그래서 두 개의 실행계획을 살펴보면 인덱스 리프 블록의 왼쪽(MIN) 또는 오른쪽 (MAX)에서 레코드 하나(FIRST ROW)만 읽고 멈춘다.
1 | SELECT MAX(TO_DATE(ch_date)) FROM scott.SORT_TEST WHERE ID = 'C'; | cs |
이 경우에는 MAX일지라도 ch_date가 내부적으로 변경을 한 뒤에 최대값을 찾기 때문에 정렬을 한뒤에 진행이 가능하다.
하지만 이걸 반대로 바꿔서 진행하면 최대 값을 찾고 그 값을 TO_DATE()로 변경하기 때문에 큰 문제 없이 FIRST 항목만 찾게된다.
출처 : 친절한 SQL 튜닝
반응형
'데이터베이스 > 친절한 SQL 튜닝' 카테고리의 다른 글
| 인덱스를 이용한 sort 연산 생략 (0) | 2018.08.01 |
|---|---|
| 인덱스 Range Scan이 되기 위한 선행 조건 (2) | 2018.07.06 |
| 인덱스 기본 사용법과 인덱스 스캔이 불가능한 경우 소 (0) | 2018.07.04 |
| 인덱스 구조 및 탐색 (0) | 2018.07.04 |
| 오라클 SGA 캐시 탐색 메커니즘 정리 (0) | 2018.06.29 |
