[DB] INDEX

2024. 4. 15. 01:31BE/DB

1. Index

 

데이터베이스(DB)의 인덱스란 데이터 검색 속도를 높이기 위해 사용하는 기술이다.

 

또한 특정 항목들에 대하여 중복이 발생하지 않도록 관리하기 위해서 사용되기도 한다.

 

하지만, 인덱스는 별도의 공간을 차지하고, 데이터가 변경될 때마다 추가적인 연산이 발생한다.

 

인덱스를 사용할지 말지 신중하게 따져봐야 한다.

 


2. Index의 종류

 

인덱스는 몇 가지 조건에 따라서 생성된다.

 

 

  PK 존재 PK 없음
Clustered index PK Unique + NOT NULL
Secondary key Unique Unique

 

show index from table_name;

테이블의 index를 조회할 수 있다.

 


가. Clustered index

 

  • 클러스터형 인덱스
    : 데이터들을 일정 기준으로 정렬하는 인덱스
    : 테이블 당 하나만 생성 가능.
    : 보조 인덱스보다 검색 속도가 빠르다.
    : 보조 인덱스보다 입력, 수정, 삭제는 느리다.
    : 새로운 인덱스 생성 시 데이터 전체를 다시 정렬해야 함 → 부하 발생

 

// 생성
alter table table_name add primary key index index_name (col_name);
alter table table_name add constraint pk_name primary key (col_name);

// 삭제 1
drop index primary on table_name;
// 삭제 2
alter table table_name drop primary key;

create index문으로는 클러스터형 인덱스는 만들 수 없다.

 

모든 인덱스를 제거하고자 할 때, 보조 인덱스 → 클러스터 인덱스 순으로 삭제한다.

 


나. Secondary index

 

  • 보조 인덱스
    : 또는 Non-Clustered index
    : 후보키에 부여 가능한 index
    : 별도의 페이지에 인덱스를 구성. 데이터 자체를 정렬하진 않음.
    : 데이터가 위치하는 주소값을 가짐.
    : 클러스터형 인덱스보다는 검색 속도는 느리지만 입력, 수정, 삭제는 더 빠름.
    : 테이블 당 여러 개의 보조 인덱스를 생성할 수 있다.

 

Unique를 사용하거나 CREATE INDEX문을 통해서 생성할 수 있다.

// 생성 1
create [unique] index index_name on table_name (col_name) [asc|desc]
// 생성 2
alter table table_name add index [unique] index_name (col_name);

// 삭제 1
drop index index_name on table_name;
// 삭제 2
alter table table_name drop index index_name;

unique option을 선택할 시 중복되는 값을 허용하지 않는다.

 


3. Index 전략

 

  1. where 절에서 많이 사용되는 열에 생성하기.
  2. join에 자주 사용되는 열에는 인덱스 생성하기.
  3. 열에 중복되는 데이터가 20%미만일 때.
  4. 외래키를 설정한 열에는 자동으로 외래키 인덱스가 생성됨.
  5. 데이터 변경이 자주 일어나는 경우 주의할 것.
  6. 사용하지 않는 인덱스는 제거할 것.

 


'BE > DB' 카테고리의 다른 글

[DB] JOIN  (0) 2024.06.22
[DB] VIEW  (0) 2024.06.22
[DB] Transaction  (1) 2024.04.14
[DB] SET Operator  (0) 2024.04.14
[DB] 내장함수  (0) 2024.04.14