DB Index란
💡 요약
- Index란
- 키 값으로 행 데이터의 위치를 식별하는데 사용하는 색인
- 장점
- 검색 속도 향상
- 단점
- Index도 저장해야해서 저장 공간 차지
- DML 작업은 성능 저하
- 동작 방식
- 주로 범위 검색에 용이한 B+ tree 를 사용
1. DB Index란
- 정의
- 색인
- 키 값으로 행 데이터의 위치를 식별하는데 사용하는 기능
- 목적 : RDB에서 검색 속도를 높이기 위한 기술
- 특징
- 칼럼의 값과 해당 레코드가 저장된 주소를 키와 값의 쌍으로 인덱스를 만듦
- 항상 정렬된 상태를 유지 -> 검색은 빠르지만, DML은 느림
- PK는 자동으로 Index가 생성됨
- 활용
-
Where
절의 조건이나Join
조건에 사용될 때 성능이 향상됨💡 DB Index와
Join
Join
조건에 있는 열이 Index로 지정되어 있으면 DB는 인덱스를 사용하여Join
작업을 수행하여 효율적으로 처리
-
- 방식
- Table의 Column을 색인화하여 따로 파일로 저장
- 해당 Table의 Record를 Full Scan 하지 않고, 색인화된 Index 파일을 검색하여 검색 속도를 향상시킴
- Index Table에서 Where에 포함된 값을 검색
- 해당 값의 table_id PK를 획득
- table_id PK값으로 원본 테이블에서 값을 조회
- 과정
-
Table을 생성하면,
FRM
,MYD
,MYI
3개의 파일이 생성됨💡
FRM
,MYD
,MYI
- MySQL DB에서 사용되는 파일 확장자
확장자 설명 FRM(Format) 테이블 구조가 저장되어 있는 파일 MYD(Data) 실제 데이터가 있는 파일 MYI(Index) Index 정보가 들어 있는 파일
Index를 사용하는 경우에만 생성됨 -
사용자가
Select
쿼리로 Index를 사용하는 Column을 탐색하면,MYI
파일을 검색하여
-
- 장점
- 검색과 정렬 속도 향상
- 단점
- Index를 생성하면
.mdb
파일의 크기가 증가 - Index된 Field에서 DML(Update, Insert, Delete)의 성능 저하
- 인덱스를 유지하고 업데이트하는 과정이 추가적인 오버헤드를 발생시킴
Insert
: Index Split 현상이 발생할 수 있어 성능에 불리Delete
: 데이터를 삭제하면 Table에서는 삭제되지만 Index에서는 논리적인 삭제만 되어 Index가 물리적인 공간을 차지함Update
: Index에는 Update가 없기 때문에 Delete 후 Insert
- 데이터 변경 작업이 자주 발생하는 경우 Index를 재작성하여 성능에 영향
- Index를 생성하면
- Index 설계시 고려사항
- 사용하면 좋은 경우
- Where 절에서 자주 사용되는 Column
- 외래키가 사용되는 Column
- Join에 자주 사용되는 Column
- 사용을 피해야 하는 경우
- Data 중복도가 높은 Column(카디널리티가 낮은 컬럼)
- DML이 자주 일어나는 Column
- 사용하면 좋은 경우
2. Index의 자료구조
B+ Tree
- 일반적으로 사용되는 인덱스 알고리즘
- Column의 값을 변형하지 않고 원래의 값을 이용해 인덱싱하는 알고리즘
💡 B+ Tree
- Binary Search Tree : 값이 정렬되어 있는 경우 절반씩 소거하며 검색할 수 있도록 돕는 자료 구조
- B-tree : 분기점을 여러 개 설정하여 Binary Search Tree보다도 검색 속도를 향상
- B+tree
- 데이터는 리프노드 노드에만 보관
- 리프노드가 아닌 노드는 값을 찾기 위한 가이드만 제공
- 리프노드끼리 연결리스트로 연결되어 있어 범위 검색에 용이
Hash 인덱스
- 칼럼의 값으로 해시 값을 계산해서 인덱싱하는 알고리즘
- 장점 : 매우 빠른 검색을 지원
- 단점 : 값을 변형해서 인덱싱하여 특정 문자로 시작하는 값으로 검색을 하는 전방 일치와 같이 값의 일부만으로 검색하고자 할 때는 해시 인덱스를 사용할 수 없음
- Hash Table은 시간복잡도가 O(1)으로 효율적이지만, 동등연산에만 특화됨
트리에 대해서 더 공부해야겠다!
그리고 DB Index를 설정하는 방법에 대해서도 알아봐야겠다.
그리고 DB Index를 설정하는 방법에 대해서도 알아봐야겠다.
참고 자료
- Tech Interview - Index
- DB Index 란?
- Interview_Question_for_Beginner - Database
- 🙈[DB이론] 인덱스(Index)🐵
- tech-interview - db
- index가 뭔지 설명해보세요 (개발면접시간)
Leave a comment