가자미의 개발이야기
[데이터베이스] 인덱스 본문
인덱스는 클러스터 인덱스와 보조 인덱스로 나뉨.
모두 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 테이블이름;
'Computer Science > 데이터베이스' 카테고리의 다른 글
[데이터베이스] ER 모델과 약한 엔티티집합 (0) | 2021.05.29 |
---|---|
[데이터베이스] 데이터 모델링 과정 (0) | 2021.02.26 |
[데이터베이스] 뷰 (0) | 2021.02.23 |
[데이터베이스] 부속질의 (0) | 2021.02.23 |
[데이터베이스] MySQL의 my.ini 수정 권한이 없다고 나올 때 해결방법. (0) | 2021.02.23 |