DB 인덱싱(Database Indexing)은 데이터베이스에서 데이터를 더 빠르게 검색하기 위해 사용하는 기술
데이터베이스에서 대량의 데이터를 검색할 때, 인덱스를 사용하면 특정 데이터를 빠르게 찾아낼 수 있어 성능을 크게 향상시킬 수 있다.
1. 인덱스의 개념
- 책의 목차와 유사하게, 인덱스는 데이터베이스 테이블의 특정 열(column)에 대한 검색용 정보를 미리 저장해둔 자료 구조
- 인덱스를 사용하면 테이블의 모든 행을 하나씩 탐색하지 않아도 되므로, 검색 속도가 크게 향상된다.
2. 인덱스의 작동 방식
- 인덱스는 일반적으로 'B-트리(Balanced Tree)'나 '해시(Hash)'와 같은 자료 구조로 저장
- 인덱스는 특정 열의 값을 기준으로 정렬하여 저장하므로, 데이터 검색 시 이진 탐색(Binary Search) 등의 고속 탐색 알고리즘을 사용할 수 있다.
3. 인덱스 사용의 장점
- 검색 속도 향상: 특정 조건으로 데이터를 검색할 때 성능을 크게 향상, 특히, 대용량 데이터를 다루는 경우 성능 차이가 크다.
- 정렬 속도 향상: ORDER BY와 같은 정렬 작업에서도 인덱스를 사용하면 정렬 속도가 빨라진다.
- 중복 제거: DISTINCT를 사용할 때도 인덱스를 통해 중복 제거를 효율적으로 수행할 수 있다.
4. 인덱스의 단점
- 저장 공간 사용 증가: 인덱스를 생성하면 추가적인 저장 공간이 필요하다.
- 데이터 수정 시 성능 저하: 데이터를 삽입, 수정, 삭제할 때마다 인덱스도 갱신해야 하므로, 쓰기 작업의 성능이 다소 저하될 수 있다.
- 불필요한 인덱스는 성능 저하 유발: 필요한 열에만 인덱스를 설정, 너무 많은 인덱스를 추가하면 오히려 성능이 저하될 수 있다.
5. 인덱스의 사용 예
- '기본 키(Primary Key)'나 '고유 키(Unique Key)'는 자동으로 인덱스가 생성된다.
- 자주 검색되는 열(예: 사용자 ID, 제품 이름 등)에 인덱스를 추가하여 검색 성능을 개선할 수 있다.
- WHERE 조건에 자주 사용되거나, JOIN에서 연결되는 열에 인덱스를 걸어두면 좋다.
6. 인덱스의 종류
- 단일 인덱스(Single Column Index): 하나의 열에만 적용된 인덱스
- 복합 인덱스(Composite Index): 여러 열을 결합하여 만든 인덱스로, 여러 열을 기준으로 검색할 때 유용
- 고유 인덱스(Unique Index): 중복 값을 허용하지 않는 인덱스
- 전체 텍스트 인덱스(Full-Text Index): 텍스트 검색에 최적화된 인덱스
- 클러스터형 인덱스(Clustered Index): 실제 데이터가 인덱스 순서대로 정렬된 방식(주로 기본 키에 사용)
7. 인덱스 자료구조 종류
1. B-Tree (Balanced Tree) 인덱스
- 가장 일반적인 인덱스 자료구조로, 정렬된 데이터를 빠르게 검색, 삽입, 삭제할 수 있도록 설계되어 있다.
- 구조: 트리 형태로, 각 노드에 여러 키가 저장되며, 각 키에 대한 포인터를 가진다.
- 특징:
- 데이터가 정렬된 순서대로 저장되며, **범위 조회(range query)**나 정렬된 결과를 얻는 데 유리하다.
- 균형을 유지하여 삽입 및 삭제 작업의 성능이 일정하다.
- 사용 예시: 일반적인 SQL 쿼리에서 WHERE, ORDER BY, JOIN 등 다양한 조건을 처리하는 데 많이 사용
2. Hash Index
- 해시 함수를 사용하여 키를 해시값으로 변환하고, 해당 해시값을 이용해 데이터를 빠르게 찾는다.
- 구조: 해시 테이블 구조로, 각 레코드는 해시값에 의해 직접적인 주소로 저장된다.
- 특징:
- 빠른 **등가 비교(equality search)**에 매우 유효합니다. 예를 들어, =, IN, EXISTS 등의 연산에 강점이 있다.
- 범위 검색에는 적합하지 않다.
- 해시값이 일관되지 않기 때문에, 범위 조회는 불가능하거나 비효율적이다.
- 사용 예시: 고유한 값을 빠르게 검색할 때, 예를 들어 회원 ID와 같은 유니크 키 검색에 유리하다.
3. Bitmap Index
- **비트맵(Bitmap)**을 사용하여 조건에 맞는 레코드들의 존재 여부를 빠르게 확인한다.
- 구조: 각 컬럼에 대해 비트맵을 생성하며, 각 비트는 컬럼 값이 특정 조건을 만족하는지 여부를 나타낸다.
- 특징:
- 저용량 컬럼에 매우 유효합니다. 예를 들어, 성별(M/F), 상태(활성/비활성) 등의 값이 적은 컬럼에 적합하다.
- 범위 검색보다는 등가 검색에서 효율적이다.
- 사용 예시: 상태 컬럼이 적은 값으로 구성된 경우(예: 활성/비활성)에서 범위가 아닌 특정 값들에 대한 검색이 빠르다.
4. Full-Text Index (전체 텍스트 인덱스)
- 문서 기반의 텍스트 데이터를 효율적으로 검색할 수 있도록 설계된 인덱스이다.
- 구조: 텍스트 데이터를 분리하여 단어별로 인덱스를 생성하고, 각 단어가 등장한 위치를 기록한다.
- 특징:
- 텍스트 데이터에서 특정 단어를 빠르게 찾을 수 있게 도와준다다.
- LIKE 검색이나 정규 표현식으로 텍스트를 검색할 때 유용하다.
- 사용 예시: 검색 엔진이나 문서 저장소에서 텍스트 기반 검색에 사용된다.
5. GiST (Generalized Search Tree)
- 일반화된 검색 트리로, 다양한 종류의 데이터를 효율적으로 검색할 수 있도록 하는 자료구조다.
- 구조: 트리 형태로, 다양한 형태의 데이터를 지원합니다.
- 특징:
- 범위 검색과 다양한 데이터 타입에 대한 효율적인 검색을 지원한다.
- 공간 데이터, 다양한 속성들을 인덱싱하는 데 유용하다.
- 사용 예시: 지리 정보나 다차원 데이터(예: 2D/3D 공간 데이터)에서 사용된다.
6. SP-GiST (Space-partitioned Generalized Search Tree)
- 공간 분할 인덱스로, 공간 데이터를 효율적으로 처리하는 데 사용된다.
- 구조: 공간 데이터를 여러 영역으로 나누어 저장한다.
- 특징:
- 다차원 공간 데이터와 같은 특수한 형태의 데이터에 대해 효율적인 검색을 제공한다.
- 예를 들어, 지리 정보나 좌표 기반 데이터에 유용하다.
- 사용 예시: 지도 서비스나 공간적 데이터 처리에서 사용된다.
7. R-Tree
- 공간 데이터를 위한 트리 기반 인덱스입니다. 주로 다차원 공간에서 데이터를 검색할 때 사용된다.
- 구조: 공간을 여러 개의 사각형 영역으로 나누어 인덱스를 생성한다.
- 특징:
- 2D/3D 공간 데이터에 적합하다.
- 범위 검색과 근접 검색을 지원한다.
- 사용 예시: 지리적 정보 시스템(GIS), 지도 서비스 등에서 위치 기반 검색을 할 때 사용된다.
8. Inverted Index (역 인덱스)
- 텍스트 검색에서 자주 사용되는 자료구조로, 단어와 해당 단어가 등장한 문서의 목록을 매핑한다.
- 구조: 각 단어를 키로, 그 단어가 등장한 문서의 ID를 값으로 매핑하여 저장한다.
- 특징:
- 전체 텍스트 검색을 매우 효율적으로 처리할 수 있다.
- 주로 검색 엔진에서 사용되며, 자주 등장하는 단어들을 빠르게 찾을 수 있도록 도와준다.
- 사용 예시: 구글과 같은 검색 엔진에서 웹 페이지를 색인화할 때 사용된다.
9. Trie (트라이)
- 문자열 검색에서 사용하는 자료구조로, 문자열을 문자 단위로 분리하여 저장한다.
- 구조: 각 노드가 문자 하나를 저장하며, 경로를 따라가면서 특정 문자열을 찾을 수 있다.
- 특징:
- 빠른 문자열 검색에 적합합니다. 예를 들어, 접두어나 접미사 검색에 강력한 성능을 발휘한다.
- 자동완성이나 사전 검색에 적합합니다.
- 사용 예시: 검색어 자동완성, 사전 구현 등에 사용된다.
'이론공부' 카테고리의 다른 글
자료구조 - R트리(R-Tree) (0) | 2024.11.16 |
---|---|
기술면접 준비(2) (1) | 2024.09.30 |
프록시(Proxy)란? (0) | 2024.09.05 |
기술면접 준비(1) (1) | 2024.09.05 |
혼자공부하는 컴퓨터 구조와 운영체제 Ch1~5 (0) | 2024.06.14 |