본문 바로가기

데이터베이스

Non clustered Index

비클러스터형 인덱스는 클러스터형 인덱스와 다르게 테이블 내에 데이터를 실제로 정렬하지는 않는다.

 

비클러스터형 인덱스는 인덱스와 데이터는 서로 다른 곳에 저장이 된다.  

 

이러한 특징으로 비클러스터형 인덱스는 테이블 당 2개 이상의 비클러스터형 인덱스가 허용된다.

클러스터형 인덱스가 테이블당 하나의 인덱스가 있는 것과 다르게 비클러스터형 인덱스는 하나의 테이블에 여러 개의 인덱스를 만들 수 있다. 

 

여기서 중요한 사실 하나는 테이블 내의 데이터가 클러스터형 인덱스 순서로 정렬이 되는 반면 비클러스터형 인덱스의 데이터는 어떤 특정한 순서로 정렬이 된다. 비클러스터형 인덱스는 컬럼에 값들과 그 컬럼값이 속하는 레코드의 주소가 포함된다. 

 

인덱스를 생성한 컬럼에 대한 쿼리로 실행되면 데이터베이스는 먼저 인덱스로 이동하여 테이블에서 해당 행의 주소를 찾는다. 그런 다음 해당 레코드 주소로 이동하여 다른 열 값을 가져옵니다. 이 추가 단계로 인해 비 클러스터형 인덱스가 클러스터형 인덱스보다 느리다.

 

비클러스터형 인덱스 만들기

 

Create Nonclustered Index IX_tblStudent_Name

On Student(name Asc)

 

위의 스크립트는 학생 테이블의“이름”열로 비 클러스터형 인덱스를 만든다. 인덱스는 이름을 기준으로 오름차순으로 정렬한다. 앞서 언급했듯이 테이블 데이터와 인덱스는 다른 위치에 저장된다. 인덱스는 생성할 당시의 정의에 따라 정렬되며 테이블과 별도로 저장된다.

 

학생테이블 데이터

이름 행주소
Fim 행주소
Bim 행주소
Dim 행주소
Cim 행주소
Aim 행주소

IX_tblStudent_Name 인덱스 데이터