SW/면접

SW 면접 : 데이터베이스 : 클러스터드 인덱스, 넌클러스터드 인덱스 : 개념, 차이점, 성능 비교

얇은생각 2020. 8. 26. 20:00
반응형

SW 면접 : 데이터베이스 : 클러스터드 인덱스, 넌클러스터드 인덱스 : 개념, 차이점, 성능 비교

 

클러스터드 인덱스

클러스터드 인덱스는 한 테이블에 하나만 사용할 수 있습니다. 데이터는 기본적으로 오름차순으로 정렬을 진행합니다. 기본 키를 설정하면 자동으로 클러스터드 인덱스가 적용되어집니다.

정렬된 데이터 페이지는 4개로 나누어집니다. 갓 첫 번쨰 포인터 주소를 상위 루트 페이지에 차례대로 들어가집니다. 조회 시 직접적인 액세스를 할 수 가 있습니다. root -> leaf, data 데이터 순서가 정렬이 되어 있으면, 액세스 시 바로 찾을 수 있습니다. 

리프 페이지 생성으로 데이터를 정렬하고 분할합니다. 루트 페이짓를 생성하면 데이터를 조합하고 주소를 지정합니다. 루트 페이지는 바로 리프 페이지로 이동이 가능하기 때문에 속도가 빨라집니다. 

 

 

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

제약 조건의 정의는 대게 테이블 생성 구문에서 발생합니다. alter 문을 사용할 떄 주의해야 합니다. 원래 테이블에서 PK, UQ 인덱스가 생성되어 있습니다. 다시 인덱스를 생성합니다. 그러면, 과부하가 걸리게 됩니다. 시스템의 성능이 많이 떨어지는 상황이 발생해 심각해질 수 있습니다.

 

 

논클러스터드 인덱스

논클러스터드 인덱스는 한 테이블에 제약 조건이 걸려 있습니다. 그러면, 한 개 이상 적용할 수 있습니다. 데이터는 물리적으로 정렬하는 것은 아닙니다. 

물리적 데이터는 정렬이 되지 않아 따로 물리적 주소로 인덱스를 구성합니다. 최초 루트부터 시작된 인덱스는 원하는 데이터를 비교합니다. 비교를 통해 검색해나간다고 보면 됩니다. root -> leaf -> data 방식으로 간접적으로 데이터를 검색해 나가는 것입니다.

데이터 조회 시 최초 루트페이지에서 해당 값을 컴페어합니다. 그 다음, 리프 페이지로 이동합니다. 리프 페이지는 데이터가 존재하는 페이지에 대해 찾고자 하는 데이터의 값에 대한 포인터 주소를 소유하고 있습니다. 리프 페이지에서는 해당 값에 대해 데이터 페이지에서 물리적 주소를 바로 찾습니다. 데이터 패에지는 건드리지 않고, leaf 페이지에서 정렬이 진행됩니다. 정렬이 진행 된 leaf 페이지는 나누어지 포인터 주소를 root에서 나눠진 처음 포인터 주소를 소유합니다.

 

 

차이점

포인트 쿼리의 경우 성능 차이는 거의 없습니다. 그러므로, 우선적으로 넌 클러스터드 인덱스를 사용하는 것을 권장합니다.

범위 조회인 경우의 성능 비교를 해보겠습니다. 범위 조회의 경우는 클러스터드 인덱스가 뛰어난 성능을 나타냅니다. 그 이유는 조회의 시작 지점에서 조회의 마지막 지점까지 데이터가 정렬되어 있습니다. 이 이유 때문에서 조회의 시작 지점부터 조회의 마지막 지점까지 연속해서 데이터를 읽어 올 수 있습니다. 효율적으로 데이터를 검색할 수 있습니다.

커버드 쿼리의 경우의 성능을 비교해보겠습니다. 넌클러스터드 인덱스가 일반적으로 클러스터드 인덱스보다 성능면에서 떨어집니다. 하지만 한 가지의 경우에서 빠릅니다. 바로 그것이 커버드 쿼리일 때 입니다. 즉 이 상황에서는 넌클러스터드 인덱스가 더 좋다고 할 수 있습니다.

반응형