본문 바로가기
부트캠프/백엔드 스터디

[DB] index

by 상똥 2024. 1. 16.

[index]

1. 인덱스란?

- 인덱스: 데이터베이스 테이블에 대한 검색 성능(속도)을 높여주는 자료구조

- 책의 목차와 비슷한 개념, 목차 = 인덱스 / 페이지 = 물리적 저장주소 / 내용 = 데이터

 

2. 작동 방식

- 특정 컬럼에 인덱스를 생성하면 해당 컬럼의 데이터들을 정렬하여 별도의 메모리 공간에 데이터의 물리적 주소와 함께 저장

- where조건 등을 통해 생성한 인덱스를 탐색할 수 있음

- 인덱스에 저장되어있는 데이터의 물리적 주소로 가서 데이터를 가져오는 식으로 동작

- 검색 속도의 향상

 

3. 인덱스의 장점과 단점

장점

- 테이블을 조회하는 속도와 그에 따른 성능을 향상시킬 수 있음

- 시스템의 부하를 줄일 수 있음

단점

- 인덱스를 관리하기 위한 추가작업과 공간이 요구됨

- 인덱스를 잘못 사용할 경우 성능이 저하되는 역효과 발생 가능

 

[인덱스를 사용하는 이유]

1. where 절의 효율성

- 테이블 내에 저장된 레코드는 순서가 없이 저장되어, 특정 조건에 맞는 데이터들을 찾아낼 때 full table scan을 하게 됨

- 인덱스 테이블은 정렬되어 있어 where에 맞는 조건을 빠르게 찾아낼 수 있음

 

2. order by 절의 효율성

- 인덱스를 사용하면 order by의 sort과정을 피할 수 있음

- 이미 정렬이 되어있기 때문

 

3. Min, Max의 효율적인 처리가 가능

- full table scan 필요 없이 가져올 수 있음

 

4. 트리의 효율성

- 균형잡힌 트리 구조와 트리 깊이의 대수확장성 때문

- 대수확장성 : 트리 깊이가 리프 노드 수에 지해 매우 느리게 성장하는 것을 의미

- 인덱스가 한 깊이씩 증가할 때마다 최대 인덱스의 항목 수는 4배씩 증가

트리 깊이 인덱스 항목의 수
3 64
4 256
5 1,024
6 4,096
7 16,384
8 65,536
9 262,144
10 1,048,576

 

[Hash 인덱스, B-Tree 인덱스]

1. Hash 인덱스

- 해시함수를 사용해서 데이터의 빠른 검색을 위해 인덱싱하는 방법

- 해싱된 데이터 값에 따라 저장될 버킷 위치를 정하기 때문에 빠른 속도로 검색 영역을 제한할 수 있음(실제 저장 위치를 빠르게 알 수 있음)

- 엄밀히 따지면 '정렬'되어 있다고 볼 수 없음

- 동등비교(=)에서 효과적 (특정 값을 찾는데에 최적화되어있음)

- 정렬할 필요가 없어 삽입 및 삭제가 빠름

 

2. B-tree인덱스

- 인덱스 키를 바탕으로 항상 정렬된 상태를 유지한다

- 인덱스는 보통 b-tree로 이루어져있음

- 루트노드, 브랜치노드, 리프노드로 나뉨

- 인덱스 130을 찾으려 할 때 전체탐색으로는 130번 탐색해야하지만 위의 b-tree구조에서는 노드들로 나눠 세 번 만에 찾을 수 있음 

 

[인덱스 스캔 방식]

[좋은 인덱스 설계를 위해 고려해야 할 조건]

[인덱스 설계 시 null값]

[클러스터 인덱스와 논클러스터 인덱스]

[인덱스(인덱스 서버) 샤딩 방식]

'부트캠프 > 백엔드 스터디' 카테고리의 다른 글

[DB] 트랜잭션, ACID  (0) 2024.01.29
[DB] KEY  (1) 2024.01.29
[DB] ORM  (0) 2024.01.15
[DB] RDBMS/NoSQL  (1) 2024.01.15