[DB] index
[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값]
[클러스터 인덱스와 논클러스터 인덱스]
[인덱스(인덱스 서버) 샤딩 방식]