DB Index-2
DB Index-2
Multicolumn Index
DB의 인덱스를 설정하는 경우 하나의 column이 아닌 여러 개의 column을 이용하는 것.
Column 순서
Multicolumn Index를 만들 때 작성된 column의 순서대로 만들어지게 됨. Where 조건문에 빈번하게 사용되는 column일 수록 만들 때 앞에 둬야 함.
동작 방식
만약 두 열 c1, c2에 대해 c1, c2 순으로 인덱스를 만든 경우, c1에 대한 인덱스에 먼저 접근됨. 각 인덱스는 c2에 대한 인덱스의 포인터를 가지고 있고, 해당 포인터로 c2에 접근해서 조회 가능.
다음과 같이 c2에만 접근한다면 위 인덱스를 사용할 수 없음. 다만 c1에만 접근하는 경우에는 사용 가능.
SELECT *
FROM User
WHERE c2 = 1000
Range scan
Multicolumn 인덱스를 사용하더라도, 특정 범위를 찾는 range scan을 사용한다면, 해당 column 이후의 column들은 인덱스를 사용하지 않음.
즉, c1, c2, c3 순으로 인덱스를 만든 경우, 다음과 같은 sql을 실행한 경우, c1, c2에 대한 조건은 index를 이용해 조회하지만, c3 조건에 대한 부분은 인덱스를 사용하지 않고 조회하게 됨.
SELECT *
FROM User
WHERE c1 = 1000 AND c2 >= 260 AND c3 = 5
유의사항
- 쿼리 상황에 따라 성능이 좌우됨. Multicolumn 인덱스가 쿼리와 완벽히 맞는 경우에는 좋은 성능.
- 쿼리와 맞지 않는 경우 오버헤드가 증가하거나 충돌 가능, 최대한 적게 유지.
- 대부분의 경우 single column 인덱스만으로 충분.
References
- https://dataschool.com/sql-optimization/multicolumn-indexes/
- https://devonce.tistory.com/52
- https://medium.com/pgmustard/multi-column-indexes-4d17bac764c5