본문으로 바로가기
728x90
반응형
SMALL

클러스터드 인덱스 vs 넌클러스터드 인덱스

인덱스는 <키,포인터>구조로서 보통 레코드에 빠르게 접근하기 위해 사용된다.

DB에서는 두 종류의 인덱스가 존재한다. 그 차이를 알아보자.

 

 

인덱스가 없는 경우의 구조

데이터가 삽입된 순서대로 페이지가 구성된다.

 

 

클러스터드 인덱스

  • 테이블 전체가 정렬된 인덱스가 되는방식, 실제 데이터와 무리를 지어 인덱싱되므로 클러스터드 인덱스라 부른다.
  • 데이터와 함께 전체 테이블이 물리적으로 정렬된다. Create, Delete, Update 할때마다 재정렬된다.
  • 클러스터드 인덱스는 테이블 당 하나만 만들 수 있다.
  • mysql 에서는 자동으로 PK를 설정하면 클러스터드 인덱스가 된다.(default)

 

 

넌클러스터드 인덱스

  • 넌클러스터드 인덱스는 보조 인덱스(Secondary Index)라고도 불린다.
  • 인덱스 페이지만 정렬되어있고, 데이터 페이지는 정렬되지 않는다. 즉 , 물리적으로 테이블을 정렬하지 않는다.
  • 정렬된 별도의 인덱스 페이지를 생성한다. 페이지번호+ #offset 으로 구성되어 데이터 페이지의 특정 행을 가리킨다. 책에서의 목차와 비슷한 개념이다.
  • 넌클러스터드 인덱스는 테이블 당 여러개를 생성할 수 있다.

 

 

비교?

  • Create, Delete, Update가 빈번한 경우 클러스터드 인덱스의 성능이 넌클러스터드 인덱스 보다 나쁠 수 있다.
  • select의 경우 모두 정렬이 되있는 클러스터드 인덱스가 성능이 좋을 수 있다.
  • 넌클러스터드 인덱스는 별도의 인덱스 페이지를 생성하므로 클러스터드 인덱스보다 더 많은 저장공간을 필요로 한다.

 

 

 

참고:

https://hudi.blog/db-clustered-and-non-clustered-index/

https://kuidoli.tistory.com/6

728x90
반응형
LIST