본문 바로가기
  • A little happiness
백엔드/SQL,데이터베이스

clustered index, non clustered index

by donghuJo 2025. 7. 17.

인덱스를 사용할 때 인덱스를 등록하는 방법은 clustered index와 non clustered index 두가지가 있다.

 

clustered index  : 인덱스 순서가 정해짐

- 범위검색 유리

- 삽입 삭제시 순서를 유지해야 함으로 전체 데이터의 이동이 필요함으로 불리

- sql에서 기본적으로 pk는 클러스터드 인덱스로 생성된다.

 

non-clustered index : B-tree를 사용한 해쉬 방식으로 연결

- B-tree 사용 : balance tree라는 의미로 말그대로 벨런스를 유지한 트리이다.

항상 균형을 유지하면서 depth별 노드를 모두 채우는 형식으로 데이터가 등록된다.

- B-tree를 사용함으로 데이터의 순서는 보장되지 않음으로 범위검색에 약하고 입력 삭제에 상관이 없다.

- 인덱스 저장시 추가저장공간이 필요하다 (약 10%)

- cardinality가 높은 컬럼에만 사용해야한다 (성별: 남, 녀 cardinality = 2 에는 사용 지양)

 

결국, 클러스터드 인덱스란 순서를 정렬하며 데이터를 유지하게 됨으로 인덱스 별도의 공간이 필요없고, 인덱스로 지정된 컬럼 그 자체가 인덱스가 된다. 하지만 데이터의 삽입 삭제시 순서를 유지시켜줘야 하기 때문에 삽입 삭제시에 불리함이 있다.

 

논클러스터드 인덱스란 별도의 저장공간을 가지고, 데이터의 메모리 위치를 기억하게 된다. 따라서 실제 데이터를 찾아야하는 key lookup이 발생하게 된다.

 

이러한 구조는 데이터 하나를 접근할 경우에는 key lookup이 한번 발생하는 정도의 성능차이로 큰 차이가 없지만 찾는 데이터의 크기가 큰 범위검색, 다수의 검색을 수행할 시, 순서대로 데이터를 읽어오면 되는 클러스터드 인덱스의 sequence i/o는 디스크 헤더의 부담이 없으나, 논클러스터드 인덱스의 경우 흩어진 데이터를 찾아와야하는 random i/o가 발생하게 된다. 흩어진 데이터를 하나씩 조회하게 되는 random i/o는 디스크 헤더에 부담을 주게 되고 이러한 부분에서 클러스터드 인덱스와 논클러스터드 인덱스의 성능 차이가 확연히 드러나게 된다.

 

 

 

https://www.youtube.com/watch?v=NkZ6r6z2pBg&t=894s 

 

 

 

https://junghn.tistory.com/entry/DB-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0-%EC%9D%B8%EB%8D%B1%EC%8A%A4%EC%99%80-%EB%84%8C%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0-%EC%9D%B8%EB%8D%B1%EC%8A%A4-%EA%B0%9C%EB%85%90-%EC%B4%9D%EC%A0%95%EB%A6%AC

 

[데이터베이스] 클러스터 인덱스와 넌클러스터 인덱스/ 개념 총정리

오늘은 인덱스의 종류인 클러스터 인덱스, 넌 클러스터 인덱스에 대해 정리해보겠습니다. 일단 인덱스란 데이터를 빠르게 검색할 수 있게 해주는 객체입니다. 컬럼을 정렬한 후에 데이터를 빠

junghn.tistory.com

 

 

댓글