가자미의 개발이야기

[데이터베이스] 인덱스 본문

Computer Science/데이터베이스

[데이터베이스] 인덱스

가자미 2021. 2. 23. 18:05

인덱스는 클러스터 인덱스와 보조 인덱스로 나뉨.

모두 B-tree 인덱스를 기반으로 함.

 

1. 클러스터 인덱스

-연속된 키 값의 레코드를 묶어서 같은 블록에 저장.

-테이블 당 하나만 생성.

-리프 노드들이 정렬된 테이블 자체.

-기본키 생성 시 자동 생성.

 

2. 보조 인덱스

-리프 노드에 실제 데이터값이 아닌 위치를 저장.

-정렬되지 않은 무작위여도 찾을 수 있음(검색 속도가 느릴 수 있음)

 

3. 인덱스 생성

인덱스는 WHERE 절에 자주 사용되는 속성이어야 한다

조인에 자주 사용되는 속성이어야 한다.

단일 테이블에 인덱스가 많으면 속도가 느려진다.(테이블 당 4~5)

속성이 가공되는 경우 사용하지 않는다.

속성의 선택도가 낮을 때 유리하다.

*선택도 = 1/서로 다른 값의 개수

CREATE [UNIQUE] INDEX [인덱스 이름]
ON 테이블이름 (칼럼 [ASC | DESC] [{, 칼럼 [ASC | DESC]}...])
=============================================================
UNIQUE는 테이블 속성 값에 대해 중복이 없는 유일한 인덱스란 의미
ASC DESC 는 정렬 방식
CREATE INDEX ix_Book2 ON Book(publisher, price);
SHOW INDEX; #인덱스 출력

4. 인덱스 재구성과 삭제

#재구성
ANALYZE TABLE 테이블이름;
=========================
B-tree 인덱스는 노드 갱신이 주기적으로 일어나 
단편화 현상(삭제된 레코드의 인덱스 값 자리가 비게 되는 상태)이 나타남
이를 재구성으로 인덱스 재생성해서 해결.

#삭제
DROP INDEX 테이블이름;