이전에 우리는 멀티 컬럼 인덱스를 아래와 같은 구성으로 만들었다.
부서
를 기준으로 먼저 정렬이 되어 있고, 그 다음 같은 부서
내에서 이름
을 기준으로 정렬되어 있다. 이런 구조로 되어 있기 때문에 부서
컬럼만 놓고 봤을 때는 부서
인덱스와 동일한 정렬 상태를 갖고 있다. 따라서 위의 멀티 컬럼 인덱스의 구조를 활용하면 부서
의 인덱스를 활용하듯이 쓸 수도 있다.
SELECT * FROM users
WHERE 부서 = '운영';
위 SQL문을 봤을 때 부서
컬럼으로 인덱스를 생성할 경우 성능이 향상되리라 짐작할 수 있다. 하지만 부서
, 이름
순으로 구성된 멀티 컬럼 인덱스를 이미 만들어 뒀기 때문에, 부서
컬럼의 인덱스를 따로 또 만들 필요는 없다.
위에서 부서
, 이름
순으로 멀티 컬럼 인덱스를 만들어뒀기 때문에, 부서
컬럼의 인덱스를 만든 것과 같은 역할도 같이 수행한다고 했다. 하지만 이 멀티 컬럼 인덱스로는 이름
컬럼의 인덱스처럼 활용할 수는 없다.
왜인지 아래 인덱스 표를 다시 한 번 확인해보자.
정렬을 자세히 잘 살펴보면 이름
기준으로 정렬이 되어 있지는 않다. 왜냐면 같은 부서
를 가진 데이터끼리만 정렬을 시켰기 때문이다. 실제로 아래 SQL문을 실행시킬 때 인덱스를 활용하지 못한다.
SELECT * FROM users
WHERE 이름 = '이재현';
따라서 멀티 컬럼 인덱스에서 일반 인덱스처럼 활용할 수 있는 건 처음에 배치된 컬럼들뿐이다.