eelseungmin

인덱스 (2) - 인덱스의 종류

by eelseungmin

들어가며

저번 글을 먼저 읽고 오는 것을 추천한다.

아래에서 설명하는 인덱스들은 Primary Index를 제외하고 모두 Non-Clustered Index 전략을 따른다.

 

종류

Primary Index

일반적으로 PK를 기준으로 Clustered Index Table이 생성된다.

 

Secondary Index

PK가 아닌 컬럼을 기준으로 데이터를 조회하거나 정렬한다면 해당 인덱스를 사용하게 될 것이다.

Non-Clustered Index Table의 형태를 가진다.

 

Unique Index

인덱스 값의 고유성을 보장해야 하는 경우 사용하는 인덱스이다. 해당 인덱스에선 중복된 값이 삽입될 수 없다.

 

Composite Index

2개 이상의 컬럼을 기준으로 생성한 인덱스를 Composite Index라 부른다.

 

위 그림 예시에 있는 쿼리가 많이 실행될 경우 Composite Index를 만드는 게 더 효율적이다.

 

또한 Name과 Country의 Composite Index를 만들 경우 이는 Name, Country를 모두 포함하거나 Name만 포함하는 쿼리엔 효율적으로 동작하지만 Country만 포함하는 쿼리에는 그렇지 않다.

 

따라서 Composite Index를 생성할 때 가장 활용도가 높은 컬럼이 먼저 위치하도록 해야 한다.

 

Covering Index

예시에 있는 쿼리처럼 쿼리에서 사용하는 컬럼이 모두 인덱스 테이블에 포함되어 있다면 보조기억장치인 디스크에 접근하지 않아도 처리가 가능해진다.

이처럼 쿼리에서 사용하는 컬럼이 모두 포함된 구조의 인덱스 테이블을 Covering Index라고 한다.

 

Filtered Index

특정 DB에서 Partial Index, Conditional Index라고 부르는 특수한 유형의 인덱스를 의미한다.

특정 데이터 집합에 필터를 적용해서 특정한 범위의 값에 대해 인덱스를 생성할 수 있다.

 

예를 들어, 위 그림에서 US와 INDIA에 대해서만 많은 요청이 들어올 경우 모든 Country를 대상으로 인덱스를 생성하기보다 US와 INDIA에 대해서만 Filtered Index를 생성하면 효율을 높일 수 있다.

 

MySQL에선 지원하지 않고 MS-SQL이나 PostgreSQL에서 지원하는 인덱스이다.

 

참조

https://blog.bytebytego.com/p/database-indexing-strategies

블로그의 프로필 사진

블로그의 정보

eel.log

eelseungmin

활동하기