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 테이블이름;