Rookiss Part5 데이터베이스 : 인덱스 컬럼 순서
🙇♀️인덱스 컬럼 순서
- 복합 인덱스 칼럼 순서
- Index(A, B, C)
🪐북마크 룩업만 조심하면 돼?
- 북마크 룩업를 최소화하면 완벽한 최적화?
- Leaf Page 탐색은 여전히 존재하기 때문에 완벽한 최적화는 아니다!
예시 [레벨, 종족] 인덱스를 걸었다고 가정하자.
- (56 휴먼)을 찾고 싶을 경우
Clustered면 리프페이지에 가서 (56 휴먼)을 찾을 것인데 (56 휴먼)도 엄청 많음
리프페이지에서 Scan을 해야 되니까 느림
- (56~60 휴먼)처럼 범위를 지정한다면 더더욱 느릴 것이다!
🪐실습
둘다 = 을 사용한다면 성능에 큰차이는 없다
범위를 사용한다면?
- 선행이 =, 후행이 BETWEEN일 때가 가자 좋다
- 선행이 BETWEEN이면 후행은 인덱스 기능을 상실한다
- 2번과 같은 경우라면 IN-LIST를 고려해보자
[!] Index(a, b, c)로 구성되었을 때, 선행에 between 사용 = 후행은 인덱스 기능 x 그럼 BETWEEN 같은 비교가 등장하면 인덱스 순서만 무조건 바꿔주면 될까? -> NO
BETWEEN 범위가 작을 때 -> IN-LIST로 대체하는 것을 고려 (사실상 여러번 = )
🪐결론
- 복합 컬럼 인덱스 (선행, 후행) 순서가 영향을 줄 수 있음
- BETWEEN, 부등호(> <) 선생에 들어가면, 후행은 인덱스 기능을 상실
- BETWEEN 범위가 적으면 IN-LIST로 대체하면 좋은 경우도 있다 (선행에 BETWEEN)
- 선행=, 후행BETWEEN이라면, 아무런 문제가 없기 때문 IN-LIST X