반응형
Index
- DB 테이블에 대한 동작의 속도를 높여주기 위한 자료구조.(출처 : wikipedia)
DB 테이블은 열을 가리키는 속성(Attribute)들과 행을 가리키는 튜플(Tuple)로 구성되는데,
테이블 전체를 하나의 '책'으로, 하나의 행을 '각 페이지(안의 내용)'라고 비유한다.
이 때, 책에서 특정 내용을 찾기 위한 방법이 무엇일지 생각해보자.
예를 들어, 데이터베이스 책에서 index에 대한 내용을 찾고 싶다면,
책의 첫 페이지부터 마지막 페이지까지 다 살펴보지 않을 것이다.
책의 앞부분에는 '목차'가 있기 때문에 'Index'라는 내용이 몇번째 페이지에 있는지 바로 알 수 있고,
우리는 바로 해당 페이지로 넘어가서 index에 대한 내용을 볼 수 있다.
데이터베이스에서 말하는 Index가 바로 책의 목차와 같다.
- 인덱스는 한 컬럼에 하나만 사용 가능
- 기본키는 디폴트로 인덱스 생성
- 인덱스 적용 컬럼 고려 기준
- 중복성 : 컬럼이 가지고 있는 값들의 중복 정도가 낮은 컬럼에 사용(카디널리티가 높은 컬럼)
- 활용성 : WHERE절, ORDER BY절, JOIN절에서 참조 빈도가 높은 컬럼
- 테이블 수정 빈도 : 위의 기준을 만족하는 컬럼에 인덱스를 사용하더라도, 테이블의 데이터가 자주 변한다면 사용을 고려해야 한다.
Index 장점
- 인덱스를 사용하면 효율적으로 데이터를 조회(SELECT)할 수 있다.
- 다만, 모든 경우에 인덱스가 조회 성능을 향상시키는 것은 아니다.
- 인덱스가 '잘 사용된' 컬럼을 WHERE 절에서 참조하거나, sorting 조회할 때 큰 효율을 볼 수 있다.
Index 단점
- 잘 사용하지 않으면 오히려 비효율을 초래한다.
- 인덱스 테이블을 저장하기 위한 추가 공간 필요(본 테이블의 약 10%를 요구)
- DML 중, (INSERT, DELETE, UPDATE) 시 인덱스 구조를 정리하기 위한 작업이 추가로 진행된다.
- 그렇다고 해서, 무조건 DML에 악영향을 미치는 것은 아니다. DELETE, UPDATE시 해당하는 데이터를 찾기 위해 결국 데이터를 조회해야 하는데, 이 때는 인덱스의 조회 성능 향상의 이점이 있다. 하지만 인덱스의 사용이 DELETE, UPDATE에 대한 전반적인 성능을 높이는 경우는 드물다고 한다.
B+ Tree
- 인덱스를 저장하는 대표적인 자료구조이다.

- 모든 key : value가 리프노드에 존재한다.
- 리프노드들이 더블 링크드 리스트로 구성된다.
- 리프노드에서 선형 검색 가능!
출처
yurimkoo.github.io/db/2020/03/14/db-index.html
반응형
'IT study > Notebooks' 카테고리의 다른 글
| Computer Science 정리 notion (0) | 2021.07.13 |
|---|---|
| OS - CPU Scheduling (0) | 2021.05.16 |
| OS - paging and Segmentation (0) | 2021.04.30 |
| OS - Global Interpreter Lock(feat. python) (0) | 2021.04.21 |
| DB - Transaction (0) | 2021.04.15 |