Database/MySQL

SQL, Multi-column INDEX(다중 컬럼 인덱스) 특징 / UNIQUE INDEX

greenyellow-s 2025. 3. 10. 09:11
728x90
반응형

INDEX

검색 작업의 속도를 향상시키는 데이터 구조

 

데이터 구조는 해시 테이블(Hash Table)B Tree 로 구현 가능하며 주로 B Tree 에서 파생된 구조로 구현된다.

인덱스 역시 데이터 구조이므로 추가적인 쓰기 작업과 저장 공간이 필요하다.


장점

- 인덱스를 사용하면 데이터 조회 속도가 빨라진다.

- WHERE, ORDER BY, MIN/MAX 속도가 빨라진다.

- 특정 데이터를 조회 할때 테이블 전체를 조회해야 한다.

  하지만 인덱스를 사용하는 경우 인덱스를 기준으로 정렬된 상태로 저장되어 있어 빠르게 찾을 수 있다.

 

단점

- 데이터 구조를 유지하기 위한 비용이 존재한다.

- 테이블과는 별개로 추가적인 공간이 필요하고 인덱스가 적용된 열에 INSERT, UPDATE, DELETE 작업 시 정렬, 인덱스 구조 갱신 등 추가적인 연산이 발생한다.


인덱스를 적용하기 적절한 경우

-    조회를 자주 하는 경우

-    삽입, 수정, 삭제가 발생하지 않는 경우

-    데이터의 중복도가 낮은 경우

-    WHERE, ORDER BY, JOIN을 자주 하는 경우


UNIQUE INDEX

중복 값을 허용하지 않는 필드로 설정


 Multi-column Index(다중 컬럼 인덱스)

두개 이상의 컬럼을 조합하여 생성한 인덱스를 의미한다.

 

특징

-    컬럼 순서 중요

              인덱스는 선언된 컬럼 순서대로 작동한다.

              (A, B) -> A 를 기준으로 먼저 정렬한 후, A 값이 동일한 경우 B 컬럼을 기준으로 정렬한다.

 

-    선행 컬럼만 사용 가능

              인덱스 (A, B, C)가 있을 때, A 또는 (A, B)를 조건으로 검색하면 인덱스를 활용할 수 있지만, B나 C만 단독으로

              검색하면 인덱스를 사용하지 못할 가능성이 크다.

 

-    Where 절에 포함된 컬럼과 일치할 경우 인덱스 활용

 

-    Order by 최적화

              정렬된 순서를 유지하고 있기 때문에 쿼리 성능이 향상된다.

 

예시

CREATE INDEX idx_user_name_age ON users (name, age);

 

Name을 기준으로 먼저 정렬, 이후 name이 동일한 경우 age 기준으로 정렬

 


마무리

각 인덱스를 구성하는 컬럼은 첫번째 컬럼부터 차례대로 정렬되고, N번째 인덱스 컬럼은 N-1번째 인덱스의 정렬에 의존해서 정렬된다.

 

다중 컬럼 인덱스 내 컬럼의 순서는 성능에 큰 영향을 미칠 수 있으므로 어떤 방식의 조회가 자주 일어나는지, 필터링이 어떻게 될 지 고민해야 한다.

 

 

728x90
반응형

'Database > MySQL' 카테고리의 다른 글

MySQL, 이클립스 연동하기  (1) 2024.10.02
MySQL, 기본 실행 방법 (실행, Schema 만들기)  (0) 2024.10.02