일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- 정처기
- 인프런
- 스터디
- 정보처리기사
- 코틀린
- 티스토리챌린지
- 혼공단
- 오블완
- 코테
- select
- 프로그래머스
- Til
- 자료구조
- Android
- 카카오코테
- SQL
- MySQL
- groupby
- 기술면접
- 알고리즘
- 혼공파
- 안드로이드
- 자바
- 안드로이드스튜디오
- join
- 혼공챌린지
- Kotlin
- CS
- java
- doitandroid
- Today
- Total
Welcome! Everything is fine.
[CS 발표_06] 인덱스란? 본문
인덱스를 사용 중일 때 데이터를 삭제하면 발생할 수 있는 문제에 대해 설명해보세요.
인덱스를 구현하는 방식에 대해 설명해보세요.
인덱스란?
인덱스란 데이터베이스에서 튜플의 검색 속도를 높이기 위해 속성 값과 튜플이 저장된 주소를 저장하는 것을 말한다. 해당 테이블의 컬럼을 색인화하여 검색 시 해당 테이블의 레코드를 full scan하는 것이 아니라 인덱스 파일을 검색하여 검색 속도를 빠르게 한다. 항상 최신의 정렬상태 유지하고, 데이터베이스 크기의 약 10% 정도의 저장 공간이 필요하다.
장점 : 인덱스 테이블에 데이터가 정렬되어 있어서 검색 속도가 빠르다.
단점 : 인덱스 테이블을 저장하기 위한 추가 공간이 필요하다, 정렬된 상태를 유지하기 위해 데이터를 추가/수정/삭제하는 경우에는 속도가 느리다.
따라서 데이터 양이 방대하며 데이터 변경보다는 검색을 자주 사용하는 경우에 인덱스를 사용하는 것이 좋다.
인덱스를 사용 중일 때 데이터를 삭제한다면?
인덱스는 데이터베이스의 검색 효율을 높이기 위해 인덱스 테이블을 사용한다.
삭제 연산이 일어나면...
데이터베이스에서는 해당 튜플이 삭제되지만 인덱스 테이블에서는 해당 튜플을 '사용하지 않음'으로 처리한다. 따라서 데이터 삭제가 잦다면 인덱스 테이블에 불필요한 데이터가 남아 저장 공간을 낭비하게 된다.
인덱스를 구현하는 방법
- 해시 테이블 인덱스 : 속성 값으로 해시 값을 계산해 인덱싱하는 방법. 속성 값을 그대로 검색해야해서 검색 속도가 빠른데도 자주 사용하지 않는다.
- B-트리 : 트리 높이가 같고 자식노드를 2개만 가질 수 있다, 모든 노드에 데이터가 저장되는 방식.
- B+트리 : 단말 노드에만 데이터를 저장하고 단말 노드 간에는 연결 리스트로 연결되는 방식.
정리
인덱스가 잦을 경우 저장공간을 낭비할 수 있다는 문제점이 있다. 인덱스는 데이터베이스의 효율을 높이기 위해서 인덱스 테이블을 사용한다. 삭제 연산이 일어나면 데이터베이스에서는 해당 튜플이 삭제되지만, 인덱스 테이블에서는 해당 튜플을 ‘사용하지 않음’으로 처리하고 실제로 데이터는 삭제하지 않는다. 따라서 잦은 데이터 삭제가 일어나면 인덱스 테이블에 불필요한 데이터가 남아 저장 공간을 낭비하게 된다.
인덱스를 구현하는 방식으로는 해시 테이블을 사용하는 방식과 B Tree, B+ Tree를 사용하는 방식이 있다. 해시 테이블은 해시 함수를 이용해 데이터의 검색 성능을 높이지만, 등호 연산(=)만 가능해서 속성 범위로 데이터를 검색할 수 없다는 단점이 있다. 반면 B Tree, B+ Tree는 트리 구조로 인덱스 테이블을 구성하며, 데이터를 범위로 검색할 수 있어서 시간 면에서 효율적이다.
'CS 스터디 > 발표' 카테고리의 다른 글
[CS 발표_08] 우선 순위 큐의 동작 원리, 힙의 삽입/삭제 (0) | 2024.06.04 |
---|---|
[CS 발표_07] 완전 이진 트리, 포화 이진 트리, 이진 탐색 트리란? (0) | 2024.06.04 |
[CS 발표_05] 데이터베이스에서 락이란? (0) | 2024.05.31 |
[CS 발표_04] UDP의 특징과 UDP에서의 오류 검출 방법 (0) | 2024.05.27 |
[CS 발표_03] HTTP Keep Alive vs TCP Keep Alive (0) | 2024.05.27 |