DB Index
목적
방법
- Table의 Column을 색인화 함 (따로 파일로 저장)
- 해당 Table의 Record를 Full scan하지 않음
- 색인화 된 (B+ Tree구조로) Index 파일 검색으로 검색 속도 향상
코드 - MySQL
ALTER TABLE table_name ADD INDEX idx_table (col1, col2);
CREATE INDEX idx_table ON table_name(col1, col2);
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가 지워지지 않고, 사용 안 됨 표시만 해둡니다.