클러스터드 인덱스와 넌클러스터드 인덱스의 차이는 무엇입니까?

  • 클러스터드 인덱스(clustered index)

클러스터드 인덱스는 한 테이블에 하나만 적용할 수 있으며, 데이터는 기본적으로 오름차순 정렬이 된다. 기본키를 설정하면 자동으로 클러스터드 인덱스가 들어가진다.

→ 정렬 된 데이터 페이지는 4개씩 나눠 각 첫 번째 포인터 주소를 상위 루트페이지에 차례대로 들어가지며 조회 시 직접적인 액세스를 할 수가 있다. root -> (leaf,data) 데이터 순서가 정렬이 되어 있어서 액세스 시 바로 찾을 수 있는 것이다.

→ 리프페이지생성 (데이터를 정렬하고 분활)

→ 루트페이지생성 (데이터를 조합하면서 번지(주소)지정)

→ 루트페이지 바로 리프페이지로 이동이 가능하기 때문에 속도가 빠르다.

  • 클러스터드 인덱스 주의사항

제약조건의 정의는 대게 테이블을 생성 구문에서 발생한다.

alter문을 사용할 때 주의해야 한다.

원래 테이블에서 PK, UQ 인덱스가 생성되어있으므로 다시 인덱스를 생성하면 부하가 걸려서 시스템이 엄청나게 느려지는 심각한 상황을 발생시킬 수도 있다.

  • 논클러스터드 인덱스(non-clustered index)

논클러스터드 인덱스는 한 테이블에 제약조건이 걸려 있다면 한 개 이상 적용할 수 있다. 데이터는 물리적으로 정렬하지 않는다.

→ 물리적 데이터는 정렬이 되지 않아서 따로 물리적 주소를 인덱스로 구성을 한다. 최초 루트부터 시작된 인덱스는 원하는 데이터를 비교하며 찾아 내려간다. root -> leaf -> data 간접적으로 데이터를 찾아 내려가는 것이다.

데이터 조회 시 최초 루트페이지 에서 해당 값을 비교해 가며 다음 리프페이지로 이동하고, 리프페이지는 데이터가 들어있는 페이지에 대해 찾고자 하는 데이터의 값에 대한 포인터 주소를 가지고 있다. 리프페이지에서는 해당 값에 대해 데이터 페이지에서 물리적 주소를 바로 찾는다. (데이터페이지는 그대로 두고 leaf페이지에서 정렬이 이루어진다. 정렬이 된 leaf페이지는 나눠진 포인터 주소를 root에서 나눠진 처음 포인터 주소를 갖는다)

  • 차이점

1) 포인트 쿼리(Point Query)인 경우의 성능 비교.

성능 차이가 별로 없다. 그러니 우선적으로 넌 클러스터드 인덱스 사용하는 것을 고려한다.

2) 범위 조회(Range Query)인 경우의 성능 비교.

범위 조회의 경우는 클러스터드 인덱스가 월등한 성능을 나타낸다. 왜냐하면 조회의 시작 지점에서 조회의 마지막 지점까지 데이터가 정렬되어 있기 때문에 조회의 시작지점부터 조회의 마지막 지점까지 연속해서 데이터를 읽어올 수 있으므로 상당히 효과적으로 데이터를 조회할 수 있기 때문이다.

3) 커버드 쿼리(Covered Query)인 경우의 성능 비교

넌클러스터드 인덱스가 일반적으로 클러스터드 인덱스보다 속도 면에서 느리지만 한 가지의 경우가 빠른데 그것이 바로 커버드 퀴리일 때이다. 즉 이 상황에서는 넌 클러스트더드 인덱스가 낫다.

▶(커버드 쿼리란?)

조회를 하는 조건과 조회의 대상이 되는 컬럼이 모드 인덱스로 구성되어 있는 경우.

데이터베이스

DMBS 를 사용할 때 Index를 써야 하는 상황이 발생할 수 있다. Index를 설정 할 때의 장점과 단점을 설명해보세요.

데이터베이스

JOIN 명령문의 종류와 활용 경우를 설명해보세요.

커뮤니티 Q&A

이론과 관련된 게시글이에요.

이해가 안 되거나 궁금한 점이 있다면 커뮤니티에 질문해 보세요!

게시글 작성하기