DB/SQL
[MySQL] 복합 인덱스 생성시 컬럼 나열 순서
bskyvision.com
2023. 6. 21. 20:52
복합 인덱스는 여러 개의 컬럼을 포함하는 인덱스입니다. 단일 컬럼 인덱스와는 달리, 복합 인덱스는 여러 컬럼에 대한 쿼리를 효율적으로 처리하는 데 도움이 됩니다.
복합 인덱스는 두 개 이상의 열을 포함할 수 있습니다. 복합 인덱스를 사용하는 쿼리는 인덱스의 첫 번째 컬럼부터 순차적으로 적용되며, 해당 컬럼에 대한 정렬을 수행합니다. 복합 인덱스에서 컬럼의 순서는 매우 중요합니다.
"컬럼의 순서는 카디널리티(cardinality)가 높은 것부터 낮은 순으로 나열하는 것이 좋습니다."
여기서 카디널리티는 특정 데이터 집합의 유니크한 값의 개수를 뜻합니다.
데이터의 중복도가 낮으면, 카디널리티가 높다고 표현합니다. 반면 데이터 중복도가 높으면, 카디널리티가 낮은 것입니다.
- 카디널리티가 낮은 컬럼 (데이터 중복도가 높은 컬럼)
- 카디널리티가 높은 컬럼 (데이터 중복도가 낮은 컬럼)
어떤 테이블에 name 컬럼과 age 컬럼이 있다면, name 컬럼이 age 컬럼에 비해 카디널리티가 높습니다. 같은 나이인 사람은 많지만, 이름이 같은 사람은 상대적으로 적기 때문입니다. 따라서, name 컬럼과 age 컬럼을 활용하여 복합 인덱스를 생성하려면, name, age 순으로 하는 게 좋습니다.
CREATE INDEX idx_name_age ON user (name, age);
참고자료
[1] https://itholic.github.io/database-cardinality/
[2] https://soft.plusblog.co.kr/87