데이터베이스

클러스터 인덱스(Clustered Index) vs 넌 클러스터 인덱스(Non-Clustered Index)

스윙스윙 2021. 8. 11. 13:15

▣ 클러스터 인덱스(Clustered Index) vs 넌 클러스터 인덱스(Non-Clustered Index)

인덱스 생성이 필요한 컬럼

 

 

클러스터 인덱스(Clustered Index) 넌 클러스터 인덱스(Non-Clustered Index)
  • 테이블당 1개씩만 허용된다.
  • 물리적으로 행을 재배열한다.
  • PK설정 시 그 칼럼은 자동으로 클러스터드 인덱스가 만들어진다.
  • 인덱스 자체의 리프 페이지가 곧 데이터이다. 즉 테이블 자체가 인덱스이다. (따로 인덱스 페이지를 만들지 않는다.)
    인덱스 페이지 용량이 넌 클러스티드 인덱스 페이지 용량보다 작음
  • 데이터 입력, 수정, 삭제 시 항상 정렬 상태를 유지한다.
  • 비 클러스형 인덱스보다 검색 속도는 더 빠르다. 하지만 데이터의 입력. 수정, 삭제는 느리다.
  • 30% 이내에서 사용해야 좋은 선택도를 가진다.

    클러스터 인덱스는 페이지를 알기 때문에 바로 그 페이지를 펴는 것
  • 테이블당 약 240개의 인덱스를 만들 수 있다.
  • 인덱스 페이지는 로그파일에 저장된다.
  • 레코드의 원본은 정렬되지 않고, 인덱스 페이지만 정렬된다.
  • 인덱스 자체의 리프 페이지는 데이터가 아니라 데이터가 위치하는 포인터(RID)이기 때문에 클러스터형보다 검색 속도는 더 느리지만 데이터의 입력, 수정, 삭제는 더 빠르다.
    클러스티드 인덱스 페이지 용량보다 큼
  • 인덱스를 생성할 때 데이터 페이지는 그냥 둔 상태에서 별도의 인덱스 페이지를 따로 만들기 때문에 용량을 더 차지한다
  • 3% 이내에서 사용해야 좋은 선택도를 가진다.

    클러스터 인덱스는 뒤에 목차에서 찾고자 하는 내용의 페이지를 찾고 그 페이지로 이동하는 것

    하나의 애트리뷰트에 들어 있는 상이한 값들의 개수가 레코드 수와 비슷하고, 그 애트리뷰트가 동등 조건에 사용되는 경우는 넌클러스터드 인덱스에 해당됨

 

-- INDEX 설정 예정(MY SQL 기준)

 

DROP TABLE STUDENT_GRADE;
CREATE TABLE STUDENT_GRADE
( STUDENT_ID int NOT NULL
, STUDENT_NAME varchar(20) NOT NULL
, SCORE int NOT NULL
);
SELECT * FROM STUDENT_GRADE;

 

-- 인덱스 생성
CREATE INDEX INDEX_STUDENT_GRADE ON STUDENT_GRADE(STUDENT_ID);

 

-- 인덱스 보기
SHOW INDEX FROM STUDENT_GRADE;

-- 인덱스 삭제
ALTER TABLE STUDENT_GRADE DROP INDEX INDEX_STUDENT_GRADE;

 

DROP INDEX INDEX_STUDENT_GRADE ON STUDENT_GRADE;

 

-- CLUSTER INEX 생성

-- 표준 SQL

CREATE [UNIQUE] INDEX 인덱스_명 ON 테이블 명( {열_이름[ASC | DESC] } ) [CLUSTER];

 

-- 오라클에서는 CLUSTER객체를 먼저 만들고 이에 대한 인덱스를 생성

CREATE CLUSTER 직원_CLUSTER (부서번호_INTEGER);

CREATE INDEX 직원_CLUSTER_IDX01 ON CLUSTER 직원_CLUSTER;

 


2014년 60번

정답 : 1번

 

(B) ALTER TABLE <table name> (B1) ADD <column name> <column type>

(D) UPDATE <table nmae> (D1) SET <column name> = <value expression> {, <column name> = <value expression> } [(D2) WHERE <selection conditon>]

(E) CREATE [(E1) UNIQUE] INDEX <index_name> ON <table name> { <column anme> [ <order> ] {, <column name> [ <order> ] }} ) [(E2) CLUSTER];