[DB] Clustered Index VS NonClustered Index

다은·7일 전
1

DB

목록 보기
4/4

서버 애플리케이션의 성능 개선을 위해 눈여겨보고는 하는 인덱스, 이 인덱스는 크게 클러스터 인덱스와 논클러스터 인덱스로 구분됩니다.

쉽게 얘기해 클러스터 인덱스는 실제 데이터를 물리적으로 정렬해 클러스터로 꾸려둔 것이고, 논클러스터 인덱스는 인덱스 페이지를 이용하는 그 외의 것들을 지칭한다고 볼 수 있는데요, 각 인덱스의 특징이 무엇이고 무엇이 다른지 알아보겠습니다.


1. 클러스터 인덱스

1. 특징

  • 테이블당 1개만 허용됨
  • B-Tree 구조임
  • 물리적으로 행을 재배열하며 항상 정렬 상태를 유지함
  • 테이블에 PK를 설정할 시, 자동으로 해당 칼럼에 대해 클러스터 인덱스가 만들어짐
  • 리프 페이지로 데이터 페이지를 가짐
  • 따라서 논클러스터 인덱스보다 조회 속도가 빠르나, 입력, 수정, 삭제의 속도는 느림
  • 인덱스 페이지를 따로 만들지 않으므로, 논클러스터 인덱스보다 차지하는 용량이 적음

2. 유용한 경우

  • 테이블 데이터가 자주 업데이트되지 않고, 조회가 더 많이 일어나는 경우
  • 값이 물리적으로 정렬되어 있기 때문에, Between같이 범위 값을 반환하거나 Order by같이 정렬하는 쿼리와 함께 사용하면 성능이 좋음



2. 논클러스터 인덱스

1. 특징

  • 테이블당 약 240개가 허용됨
  • 로그 파일에 인덱스 페이지가 저장됨
    • 즉, 실제 데이터가 저장된 곳(Heap)과 인덱스 페이지는 별도의 공간에 존재함
  • 레코드의 물리적 행을 정렬하지 않고, 인덱스 페이지만 정렬함
    • 즉, 실제 데이터는 클러스터 인덱스와 다르게 정렬되어 있지 않음
  • 리프 페이지는 데이터 페이지가 아닌, 데이터 페이지의 위치를 나타내는 포인터(RID)
  • 따라서 클러스터 인덱스보다 조회 속도는 느리나, 입력, 수정, 삭제의 속도는 빠름
  • 인덱스 페이지를 생성하기 때문에 클러스터 인덱스에 비해 차지하는 용량이 큼

👀 RID?

  • Row Id
  • DB에서 데이터가 가진 실제 주소
  • 데이터를 구분할 수 있도록, 모든 데이터는 유니크한 주소를 가지고 있음

2. 유용한 경우

  • 데이터가 조회보다는 업데이트가 더 많이 일어나는 경우



이렇듯, 클러스터 인덱스와 논클러스터 인덱스는 데이터 구조뿐만 아니라, 데이터에 접근하는 과정도 상이합니다.

클러스터 인덱스는 데이터에 바로 접근할 수 있는 반면, 논클러스터 인덱스는 목차에서 해당 페이지의 번호를 찾아 데이터에 접근하는 단계가 더 필요하죠.

인덱스 구조에 대해 공부하는 과정에서 해당 내용에 대해 간단하게 다루어봤는데요, 차차 인덱스, DB 관련 내용을 포스팅해보도록 하겠습니다.👍

profile
CS 마스터를 향해 ..

0개의 댓글