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번째 인덱스의 정렬에 의존해서 정렬된다.
다중 컬럼 인덱스 내 컬럼의 순서는 성능에 큰 영향을 미칠 수 있으므로 어떤 방식의 조회가 자주 일어나는지, 필터링이 어떻게 될 지 고민해야 한다.
'Database > MySQL' 카테고리의 다른 글
MySQL, 이클립스 연동하기 (1) | 2024.10.02 |
---|---|
MySQL, 기본 실행 방법 (실행, Schema 만들기) (0) | 2024.10.02 |