본문 바로가기
DB

clustered index와 non-clustered index

by yeonn108 2023. 2. 22.

DB에서 테이블의 데이터 레코드를 저장하는 방식

  • clustered index
    • PK가 clustered index 임
    • 데이터는 물리적으로 clustered index의 순서대로 정렬되어 저장된다.
    • 탐색 속도가 non-clustered index에 비해 빠르다.
    • 삽입, 삭제는 데이터의 물리적인 순서가 바뀌기 때문에 non-clustered index 보다 느리다.
    • clustered index는 테이블 당 하나만 가질 수 있다.
  • non-clustered index
    • 무결성 제약조건이 걸린 복합키가 non-clustered index에 해당된다.
    • 테이블 당 여러개를 가질 수 있다.
    • 인덱스에는 인덱스를 건 컬럼과 데이터의 주소를 가지고 있다.
    • 인덱스를 적용한 컬럼을 기준으로 새로운 테이블이 생성된다. 그 컬럼을 기준으로 정렬되고 실제 데이터의 주소를 가지고 있다.

요약: clustered index는 데이터가 물리적으로 정렬되어서 저장된다. PK가 해당된다. 디스크에 B+tree 구조로 저장된다.

non-clustered index는 인덱스를 건 컬럼을 기준으로 정렬되어 있고 실제 데이터는 정렬되어 있지 않고 데이터 주소를 갖고 있다.

MySQL의 InnoDB의 clustered index의 리프노드에는 실제 데이터 레코드가 있다.

 

커버링 인덱스란?

쿼리에서 사용되는 모든 컬럼이 인덱스에 포함된 것 (select, where, order by, group by 에 사용되는 모든 컬럼이 인덱스에 포함된 것)

인덱스에 쿼리에 사용되는 컬럼이 있으므로 데이터 레코드까지 접근할 필요가 없어서 I/O가 발생하지 않으므로 성능이 향상된다.

 

B+tree 와 B-tree의 차이?

 

참고: https://www.geeksforgeeks.org/difference-between-clustered-and-non-clustered-index/

https://jojoldu.tistory.com/476