본문 바로가기

Backend 개발/SQL 성능 개선

멀티 컬럼 인덱스(Multi-Column Index)란?

반응형

멀티 컬럼 인덱스란?

말 그대로 2개 이상의 컬럼을 묶어서 설정하는 인덱스. 즉, 데이터를 빨리 찾기 위해 2개 이상의 컬럼을 기준으로 미리 정렬해놓은 표이다.

실무에서 멀티 컬럼 인덱스를 자주 사용하는 때가 많은데 쿼리 튜닝을 한다고 인덱스(Index)를 마구 설정하면 어떻게 될까?에서 설명했듯, 인덱스는 많다고 좋은 것이 절대 아니다.

멀티 컬럼 인덱스도 마찬가지다. 옵티마이저가 효율적으로 사용하여 성능을 낼 수 있는 컬럼들을 기준으로 멀티 컬럼 인덱스를 생성해야 한다. 기껏 멀티 컬럼 인덱스를 설정했는데 옵티마이저가 사용하지 않는 컬럼이 있을 수 있다.(비효율)

 

멀티 컬럼 인덱스 생성 시 주의할 점

[학년, 이름] 순으로 멀티 컬럼 인덱스를 만들어두면 [학년] 컬럼 인덱스를 만든 것과 같은 역할도 같이 수행한다. 하지만, [이름] 컬럼의 단일 인덱스처럼 활용할 수는 없다.

따라서 멀티 컬럼 인덱스에서 일반 인덱스처럼 활용할 수 있는 건 처음에 배치된 컬럼들 뿐이다.

★ ★ 멀티 컬럼 인덱스를 만들 때는 순서에 주의해야 한다. 순서를 어떻게 정해서 인덱스를 만드느냐에 따라 성능 차이가 나기 때문이다.

멀티 컬럼 인덱스에서도 배치한 컬럼의 순서대로 데이터를 탐색한다. 따라서 멀티 컬럼 인덱스를 데이터 중복도가 낮은(비슷한 말로 카디널리티가 높은) 컬럼이 앞쪽으로 오는 게 좋은 경우가 많다.

(항상 그런것은 아니니 실행 계획과 SQL 실행 속도를 측정해서 판단하자)

ex) 어떤 중학교에서 1학년의 '홍길동’를 찾는다고 가정해보자. 일반적으로 1학년인 사람보다 ‘홍길동’이라는 이름을 가진 사람이 훨씬 적으므로 ‘홍길동’를 먼저 찾은 뒤에 1학년인지에 대한 여부를 확인하는 것이 빠를 것이다.

이를 일반화해서 표현하자면 '소분류를 먼저 탐색한 뒤, 대분류를 탐색하는게 더 빠르다'라고 할 수 있다. 컴퓨터도 이 특성이 동일하게 적용된다.

728x90
반응형