Cluster, NonCluster

W·2024년 2월 28일
0

MSSQL

목록 보기
33/33

클러스터

실제 데이터와 같은 무리의 인덱스

  • PK적용시 자동 생성.
  • 테이블당 한개만 생성.
  • 정렬
  • 범위쿼리와 포인트쿼리 둘다에서 성능을 발휘한다.
  • 데이터 입력, 수정, 삭제시 항상 정렬상태를 유지한다.

논-클러스터

실제 데이터와 다른 무리의 별도의 인덱스

  • Unique적용시 자동 생성.
  • 테이블당 여러개 생성 가능.
  • 정렬 X
  • 인덱스 페이지를 따로 만들기 때문에 용량을 더 차지한다.
  • 인덱스 페이지는 로그파일에 저장된다.
  • 원본은 정렬되지 않고 인덱스 페이지만 정렬된다.
  • 포인트쿼리는 성능을 발휘하지만, 범위쿼리는 성능을 보장할 수 없다.

같은 무리, 다른 무리의 추가 설명

아래와 같은 주문테이블이 있을때,

OrderID (PK)CustomerIDOrderDateTotalAmount
110012023-01-14500
210022023-01-157650
310012023-01-142000

클러스터드 인덱스 (Clustered Index)

OrderID를 기준으로 클러스터드 인덱스를 생성하면, 데이터를 물리적으로 정렬하기 때문에 테이블의 레코드와 인덱스의 레코드가 같은 무리를 형성.

  • Before
    OrderID (PK)CustomerIDOrderDateTotalAmount
    110012023-01-14500
    210022023-01-157650
    310012023-01-142000
  • After
    클러스터드 인덱스를 생성한 후에도 데이터는 동일한 무리를 형성하고 있으므로 변경되지 않는다.

논-클러스터드 인덱스 (Non-Clustered Index)

이제 CustomerID를 기준으로 비클러스터드 인덱스를 생성하면 테이블의 레코드와 인덱스의 레코드가 다른 무리를 형성.

  • Before

    OrderID (PK)CustomerIDOrderDateTotalAmount
    110012023-01-14500
    210022023-01-157650
    310012023-01-142000
  • After
    비클러스터드 인덱스를 생성하면 인덱스는 CustomerID를 기준으로 정렬된다. 이 때문에 인덱스와 원본 데이터는 다른 무리를 형성하게 된다. ( 원본과 다름!! )

    CustomerIDOrderIDOrderDateTotalAmount
    100112023-01-14500
    100132023-01-142000
    100222023-01-157650

정리

클러스터 인덱스는 데이터 위치를 바로 알기때문에 그 데이터로 바로 접근할 수 있고, 논클러스터 인덱스는 인덱스 페이지를 한번 거쳐서 데이터에 접근하는 방식이다.

용어

  • 포인트쿼리 : 조회되는 값이 한 행인 쿼리
  • 범위쿼리 : 조회되는 값이 여러행인 쿼리
profile
타협하는 순간 발전이 없어

0개의 댓글