✅ 멀티 컬럼 인덱스를 만들어두면 일반 인덱스처럼 활용할 수 있다.

이전에 우리는 멀티 컬럼 인덱스를 아래와 같은 구성으로 만들었다.

Untitled

부서를 기준으로 먼저 정렬이 되어 있고, 그 다음 같은 부서 내에서 이름을 기준으로 정렬되어 있다. 이런 구조로 되어 있기 때문에 부서 컬럼만 놓고 봤을 때는 부서 인덱스와 동일한 정렬 상태를 갖고 있다. 따라서 위의 멀티 컬럼 인덱스의 구조를 활용하면 부서의 인덱스를 활용하듯이 쓸 수도 있다.

SELECT * FROM users
WHERE 부서 = '운영';

위 SQL문을 봤을 때 부서 컬럼으로 인덱스를 생성할 경우 성능이 향상되리라 짐작할 수 있다. 하지만 부서, 이름 순으로 구성된 멀티 컬럼 인덱스를 이미 만들어 뒀기 때문에, 부서 컬럼의 인덱스를 따로 또 만들 필요는 없다.

✅ 멀티 컬럼 인덱스를 일반 인덱스처럼 활용하지 못하는 경우도 있다.

위에서 부서, 이름 순으로 멀티 컬럼 인덱스를 만들어뒀기 때문에, 부서 컬럼의 인덱스를 만든 것과 같은 역할도 같이 수행한다고 했다. 하지만 이 멀티 컬럼 인덱스로는 이름 컬럼의 인덱스처럼 활용할 수는 없다.

왜인지 아래 인덱스 표를 다시 한 번 확인해보자.

Untitled

정렬을 자세히 잘 살펴보면 이름 기준으로 정렬이 되어 있지는 않다. 왜냐면 같은 부서를 가진 데이터끼리만 정렬을 시켰기 때문이다. 실제로 아래 SQL문을 실행시킬 때 인덱스를 활용하지 못한다.

SELECT * FROM users
WHERE 이름 = '이재현';

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

✅ 멀티 컬럼 인덱스를 구성할 때 ‘소분류 → 중분류 → 대분류’ 컬럼순으로 구성하기