SQL | Clustered Index vs. Non-Clustered Index

송치헌·2021년 10월 3일
0

TIL | SQL

목록 보기
2/3
post-thumbnail

🔴 클러스터형 인덱스(Clustered Index)


  • 한 개의 테이블에 한 개의 인덱스만 생성 가능하다.
  • 로우를 인덱스로 지정한 컬럼에 맞춰 자동 정렬된다.
  • Primary Key로 지정된 컬럼에 자동으로 생성된다.
CREATE DATABASE Hospital

CREATE TABLE Patients
(
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
gender VARCHAR(50) NOT NULL,
age INT NOT NULL
)

Primary Key인 id 열에 자동으로 클러스터드 인덱스가 생성된다.

  • 만약 id = 3인 레코드를 추가한다면 물리적 순서를 유지하면서 id 컬럼에 있는 값의 오름차순으로 저장된다.
  • 인덱스를 생성할 때는 데이터 페이지 전체를 다시 정렬한다.
  • 리프 노드(Leaf Node)가 곧 데이터이다. 즉, 테이블 자체가 인덱스이다.
  • 비 클러스터형 인덱스보다 검색 속도는 빠르지만, INSERT, UPDATE, DELETE는 느리다.

🔺 비 클러스터형 인덱스(Non-Clustered Index)


  • 한 테이블에 여러개의 인덱스 생성 가능(약 249개)

  • 비 클러스터형 인덱스는 데이터 페이지를 건들지 않고 별도의 heap 공간에 인덱스 페이지를 생성한다.

  • 클러스터형 인덱스는 물리적으로 로우를 재배열하는 반면 비 클러스터드 인덱스는 데이터 페이지는 정렬되지 않고 인덱스 페이지만 정렬된다.

  • 인덱스 페이지는 키값과 RID로 구성된다.

    RID파일 그룹 번호 - 데이터 페이지 번호 - 데이터 페이지 오프셋으로 구성되어 있는 포인팅 정보이다.

  • 별도의 인덱스 페이지를 만들기 때문에 용량을 더 차지하게 된다.

🟥 정리


Clustered Index

  • 클러스터 인덱스는 영어 사전 책이라고 보면 된다. Happy라는 단어를 찾고 싶으면 H를 찾고 나머지 알파벳을 찾으면 금방 찾을 수 있다.

  • 인덱스 페이지가 곧 데이터 페이지인 셈이다. 정렬된 페이지에서 원하는 데이터를 찾으면 그게 끝이니까.

  • 대신 새로운 단어가 생겨서 중간에 껴 넣으려고 하면 다시 재정렬을 해야하기 때문에 데이터가 많을 수록 불리하다.

Non-Clustered Index

  • 비 클러스터 인덱스는 전공책 뒤에 색인이 있는 책이라고 보면 된다.

  • 책 뒤쪽에 있는 색인이 Index Page가 된다.

  • 여기서의 인덱스 페이지는 책 뒤 쪽에 따로 기록되어 있다. 그렇다고 인덱스 페이지에 가면 그 곳에서 원하는 데이터를 찾을 수 있는 것은 아니다. 왜냐면 거기는 어떤 데이터가 있는지만 보여주는 곳이니까.

  • 따라서 인덱스를 통해 데이터가 있는 주소를 알 수 있다. 그 주소로 가서 데이터를 알 수 있다.

profile
https://oraange.tistory.com/ 여기에도 많이 놀러와 주세요

0개의 댓글