Index (인덱스)

이유석·2022년 4월 1일
0

CS - Data Base

목록 보기
8/11
post-thumbnail

DB Index

목적

  • RDBMS에서 검색 속도를 높이기 위한 기술

방법

  • Table의 Column을 색인화 함 (따로 파일로 저장)
  • 해당 Table의 Record를 Full scan하지 않음
  • 색인화 된 (B+ Tree구조로) Index 파일 검색으로 검색 속도 향상

코드 - MySQL

  • index 생성
ALTER TABLE table_name ADD INDEX idx_table (col1, col2);

CREATE INDEX idx_table ON table_name(col1, col2);
  • index 삭제
ALTER TABLE table_name DROP INDEX idx_table;

과정

  • Table 생성 시, MYD, MYI, FRM 3개의 파일이 생성됨
  • FRM (Format File) : 테이블 구조가 저장되어 있는 파일
  • MYD (MySql Data File) : 실제 데이터가 있는 파일
  • MYI (MySql Index File) : Index 정보가 저장되어 있는 파일

Index를 사용하지 않는 경우, MYI 파일은 비어져 있음.
그러나, Index를 사용하는 경우, MYI 파일이 생성됨.

이후에 사용자가 Select 쿼리로 Index를 사용하는 Column을 탐색 시, MYI파일의 내용을 검사함

단점

  • Index 생성 시, .mdb파일이 증가함

    .mdb 파일 : 데이터베이스 테이블, 쿼리 등이 저장되어 있습니다.

  • 여러 사용자가 한 페이지를 동시에 수정할 수 있는 병행성이 줄어듬.
  • 인덱스 된 Field에서 Data를 업데이트하거나, Record를 추가 또는 삭제시 성능이 떨어짐.
  • 데이터 변경 작업이 자주 일어나는 경우, Index를 재작성해야 하므로, 성능에 영향을 미침

사용하면 좋은 경우

  • Where 절에 자주 사용되는 Column
  • 외래키가 사용되는 Column
  • Join에 자주 사용되는 Column

사용을 피해야 하는 경우

  • Data 중복도가 높은 Column
  • DML이 자주 일어나는 Column

B-Tree index

  • B-Tree index 는 인덱싱 알고리즘에서 가장 일반적인 사용방법입니다.
    B는 "Balanced"를 의미합니다.

  • B-Tree는 하나의 노드에 여러자료가 배치되는 트리구조 입니다.
  • 노드에 최대 배치 가능한 자료수에 따라 m차 B-Tree라고 부릅니다.
  • 자식의 수 = 노드의 자료수 + 1
  • "Root"는 2개 이상의 자식을 갖습니다.

RDBMS 인덱싱 B-Tree 구조 입니다.

  • root block, branch block, leaf block으로 구분 하게 됩니다.

  • leaf block에는 index data 와 row id 정보가 존재합니다.

  • DELETE 실행 시, Index 내에는 Data가 지워지지 않고, 사용 안 됨 표시만 해둡니다.

profile
https://github.com/yuseogi0218

0개의 댓글