일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 안드로이드
- vscode
- Database
- java
- DFS
- 백준
- 다이나믹 프로그래밍
- CS
- 그레이들
- Data Structure
- git
- 리트코드
- VIM
- BFS
- TypeScript
- 동적 계획법
- Algorithm
- Javascript
- 자바
- network
- Python
- LeetCode
- DP
- Redux
- react
- frontend
- 알고리즘
- db
- 프로그래머스
- Graph
Archives
- Today
- Total
늘 겸손하게
CS - Database - Index(인덱스) 본문
Index(인덱스)
추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조
테이블의 칼럼을 색인화한다. 두꺼운 책의 목차 부분을 만든다고 생각하면 편하다.
데이터베이스 안의 레코드를 처음부터 풀스캔하지 않고, B+ Tree를 구성된 구조에서 Index 파일 검색으로 속도를 향상시키는 기술이다.
파일 구성
테이블 생성 시, 3가지 파일이 생성된다.
- FRM : 테이블 구조 저장 파일
- MYD : 실제 데이터 파일
- MYI : Index 정보 파일 (Index 사용 시 생성)
사용자가 쿼리를 통해 Index를 사용하는 칼럼을 검색하게 되면, 이때 MYI 파일의 내용을 활용한다.
단점
- Index 생성시, .mdb 파일 크기가 증가한다.
- 한 페이지를 동시에 수정할 수 있는 병행성이 줄어든다.
- 인덱스 된 Field에서 Data를 업데이트하거나, Record를 추가 또는 삭제 시 성능이 떨어진다
- 데이터 변경 작업이 자주 일어나는 경우, Index를 재작성해야 하므로 성능에 악영향을 미친다
사용하면 좋은 경우
- Where 절에서 자주 사용되는 Column
- 외래키가 사용되는 Column
- Join에 자주 사용되는 Column
Index 사용을 피해야 하는 경우
- Data 중복도가 높은 Column
- DML이 자주 일어나는 Column
DML : 데이터 제어 언어 (Data Manipulation Language)/ SELECT, INSERT, DELETE, UPDATE
DML이 일어난 경우
- INSERT
- 기존 Block에 여유가 없을 때, 새로운 Data가 입력된다.
- 새로운 Block을 할당 받은 후, Key를 옮기는 작업을 수행한다.
- Index split 작업 동안, 해당 Block의 Key값에 대해서 DML이 블로킹 된다. (대기 이벤트 발생)
- DELETE
- Table에서 data가 delete 되는 경우 : Data가 지워지고, 다른 Data가 그 공간을 사용 가능하다.
- Index에서 Data가 delete되는 경우 : Data가 지워지지 않고, 사용 안 됨 표시만 해둔다.
- -> Table의 데이터 수와 Index의 Data 수가 다를 수 있다
- UPDATE
- Table에서 update가 발생하면 -> Index는 Update 할 수 없다.
- Index에서는 Delete가 발생한 후, 새로운 작업의 Insert 작업이 필요 -> 2배의 작업 필요
'Computer Science > Database' 카테고리의 다른 글
CS - Database - ERD (0) | 2023.05.06 |
---|---|
CS - Database - Database (0) | 2023.05.01 |
CS - Database - Anomaly (0) | 2022.10.10 |
CS - Database - 정규화 (Normalization) (0) | 2022.10.10 |
CS - Database - SQL과 NOSQL의 차이 (0) | 2022.10.08 |