INDEX

조상원·2025년 8월 2일

DB modeling

목록 보기
5/7
  • 테이블의 열 단위에 생성되는 DB의 개체
  • 데이터 조회 성능 향상
  • 여러 열에 인덱스 생성 가능
  • 여러 열을 묶어서 인덱스 생성 가능
  • 데이터가 이미 너무 많이 들어있는 상태에서 인덱스를 생성하려고 하면 시간이 오래 걸림

클러스터형 인덱스 (Clustered Index)

  • 테이블당 한개만 생성 가능
  • PK를 만들었을 때 자동으로 만들어짐
  • 데이터를 매번 오름차순으로 정렬
  • 데이터가 정렬 후 저장
  • 데이터 페이지 = 리프 페이지
  • 검색속도 자체는 클러스터형 인덱스가 빠르지만 INSERT의 경우 보조 인덱스가 더 우수

보조 인덱스 (Secondary Index)

  • 테이블당 여러 개를 생성 가능
  • UNIQUE 제약 조건을 걸었을 때 생성 가능
  • FK 제약 조건을 걸었을 때 생성 가능
  • CREATE INDEX 구문을 통해서도 생성 가능 (ALTER TABLE로도 가능)
  • 데이터 자체의 정렬 X
  • 데이터 추가 시 데이터의 부하가 적다
CREATE [UNIQUE] INDEX 인덱스명
ON 테이블명(열 이름)
  • 중복되지 않는 열이라면 [UNIQUE] 사용하는 것이 Good
#인덱스를 분석 후 적용
ANALYZE TABLE 테이블명; 
  • 인덱스를 재구성할 때 사용
  • 중복여부에 따라 고유/비고유 인덱스로 나뉜다.
  • SELECT 앞에 EXPLAIN 사용하여 실행 계획 확인이 가능하다.

혼합하는 경우

  • 보조 인덱스의 리프페이지에 클러스터 인덱스의 Key값을 가지는 것임
  • 보조 인덱스의 구조가 변경된다.
  • 검색할 때는 손해일 수 있다.

주의 사항

  • WHERE절에서 자주 사용되는 열에 인덱스를 만들어야 한다.
  • 데이터의 중복도가 높은 열은 인덱스를 만들어도 별 효과가 없다. ex)성별
  • JOIN에 자주 사용되는 열에는 인덱스를 생성해 주는 것이 좋다.
  • DML 작업이 얼마나 자주 일어나는 경우 인덱스를 넣지 않는 것이 효과적일 수 있다.
  • 사용하지 않는 인덱스는 제거, 인덱스도 공간을 차지하기 때문에

인덱스 삭제

  • DROP INDEX
  • 인덱스를 모두 제거할 때는 보조 인덱스부터 삭제
  • 인덱스를 수정하려면 기존 인덱스를 삭제한 후 새로운 인덱스를 생성
DROP INDEX 인덱스 이름 ON 테이블 이름;
ALTER TABLE 테이블 이름 DROP INDEX 인덱스 이름;

0개의 댓글