# DB Index 목적
RDBMS에서 검색 속도를 높이기 위함
Table의 Column을 색인화 -> 파일로 따로 저장
- 해당 Table의 레코드를 전부 scan 하지 않음
- 색인화된 B+ Tree 구조 Index 파일 검색으로 검색 속도 향상
# Index 과정
Table을 생성하면 MYD, MYI, FRM 3개의 파일이 생성됨
- FRM : 테이블 구조가 저장되어 있는 파일
- MYD : 실제 데이터가 있는 파일
- MYI : Index 정보가 들어가 있는 파일
Index를 사용하지 않는 경우 MYI 파일은 비워져 있음 -> 인덱싱을 하면 MYI 파일이 생성
이후에는 사용자가 SELECT 쿼리로 Index를 사용하는 Column을 탐색 시, MYI 파일의 내용을 검색함
# 단점
- Index 생성 시, .mdb 파일의 크기가 증가함
- 한 페이지를 동시에 수정할 수 있는 병행성이 줄어듬
- 인덱스 된 Field에서 데이터를 업데이트하거나, 레코드를 추가 또는 삭제 시 성능이 저하됨
=> 추가 삭제 시 성능 저하
- 데이터 변경 작업이 자주 일어나는 경우, Index를 재작성 해야 하므로 성능에 영향을 미침
# 사용하면 좋은 경우
- WHERE 절에서 자주 사용되는 컬럼
- 외래키가 사용되는 컬럼
- 조인에서 자주 사용되는 컬럼
# 사용을 피해야 하는 경우
- 데이터 중복도가 높은 컬럼
- DML 이 자주 일어나는 컬럼
# DML이 일어나면 어떻게 될까?
1. INSERT
기존 Block에 여유가 없을 때, 새로운 데이터가 입력됨
-> 새로운 block을 할당 받은 후, key로 옮기는 작업을 수행. 많은 양의 Redo가 기록되고 유발
-> Index split 작업 동안, 해당 block의 key 값에 대해서 DML이 블로킹 됨
-> 대기 이벤트 발생
2. DELETE
Table에서 데이터가 삭제되는 경우 : 데이터가 지워지고 다른 데이터가 그 공간 사용 가능
Index에서 데이터가 삭제되는 경우 : 데이터가 지워지지 않고 사용 안 됨 표시만 함
-> 테이블의 데이터 수와 인덱스의 데이터 수가 다를 수 있음
3. UPDATE
Table에서 업데이트 발생 -> 인덱스는 업데이트 불가능
인덱스에서는 삭제가 발생한 후, 새로운 작업의 Insert -> 2배의 작업 소요
'CS공부 > Database' 카테고리의 다른 글
정규화 Normalization (0) | 2023.12.28 |
---|---|
Anomaly 이상현상 (1) | 2023.12.08 |
SQL vs. NOSQL (0) | 2023.12.08 |
SQL Injection (0) | 2023.12.08 |
Join (0) | 2023.12.08 |