728x90
반응형
3. 결합인덱스 사용 시, 인덱스 구성의 첫인덱스가 where절의 첫 조건에 적용하지 않았을 경우
두 개 이상의 컬럼을 합쳐서 인덱스를 만들 때 결합인덱스라고 한다.
결합인덱스 컬럼 선택의 기준점은
- where 절에서 and 조건으로 자주 사용되며, 각각 사용할때보다 두 개 이상의 컬럼이 결합될 때 분포도가 좋아지는 컬럼
※ 분포도(Cardinality) : 해당 컬럼의 중복도가 적을 경우 분포도가 높고, 중복도가 높을경우 분포도가 낮다
흔히, 우리가 Table의 ID 는 중복되는 값이 없으므로 분포도가 높다고 할 수 있고, Name 같은 컬럼은 ID에 비해 중복되는 값이 많으므로 분포도가 높다고 할 수 있다. - 테이블 조인을 위한 연결고리로 사용되는게 빈번한 컬럼
- 자주 정렬되는 컬럼인지 고려
- 쿼리 작성시 '=' 으로 지정할 수 있는 컬럼이 선행되어야 한다.
index를 구성할 때, A,B,C 로 구성한다고 했을 때
#첫번째 케이스
select *
from test
where A=99
and B=99
and C=99;
#두번째 케이스
select *
from test
where A=99
and B between 10 and 99
and C=99;
#세번째 케이스
select *
from test
where A between 10 and 99
and B between 10 and 99
and C=99;
첫번째, 두번째 케이스는 인덱스를 타지만, 세번째 케이스는 인덱스를 타지 않는다.
물론 두번째 케이스도 완벽하게 인덱스를 타는건 아니다. 실행계획을 떠보면 알겠지만 범위 조건은 해당 컬럼은 인덱스를 타지만, 그 뒤 인덱스 컬럼들은 인덱스를 타지 않고 filter access를 하게 된다. (https://khdscor.tistory.com/51)
쿼리 툴에서는 force index를 통해 강제로 힌트를 줄 수 있지만 ,JPA/Hibernate에서는 Query Hint 조정이 불가능
실제로 JPA/Hibernate에서의 힌트는 Hibernate의 작동 방식에 대한 Hint이지 Query Hint가 아니다.
728x90
반응형
'IT Diary > # SQL' 카테고리의 다른 글
[ SQL ] 003. INDEX가 동작을 제대로 안하는 경우 #1 (0) | 2023.01.04 |
---|---|
[ SQL ] 003. 실행계획 보는법 (0) | 2022.04.18 |
[ SQL ] 001. INDEX 의 정의 (0) | 2021.03.17 |
[ SQL ] 002. INDEX SCAN (0) | 2021.03.16 |