인덱스(Index)
인덱스(Index)는 데이터베이스에서 데이터를 검색할 때 속도를 높여주는 것이다. 인덱스를 사용하면 테이블에서 특정 열(column)을 쉽게 찾을 수 있다. 예를 들어, 학생 정보를 저장한 테이블에서 학번을 검색하려면, 인덱스를 사용하여 학번을 빠르게 찾을 수 있다.
// 배열 생성
const arr = [2, 4, 6, 8, 10];
// 인덱스를 사용하여 배열 요소 접근
console.log(arr[0]); // 2
console.log(arr[3]); // 8
// 배열 요소 변경
arr[1] = 5;
console.log(arr); // [2, 5, 6, 8, 10]
// 배열 요소 추가
arr.push(12);
console.log(arr); // [2, 5, 6, 8, 10, 12]
// 배열 요소 삭제
arr.splice(2, 1);
console.log(arr); // [2, 5, 8, 10, 12]
인덱스 유형
- B-Tree 인덱스
- B-Tree 인덱스는 데이터베이스에서 가장 기본적으로 사용되는 인덱스 유형이다. B-Tree 인덱스는 데이터를 정렬하여 인덱스를 생성하며, 검색, 삽입, 삭제에 대한 처리 성능이 뛰어나다는 장점이 있다. 대부분의 데이터베이스에서 기본적으로 제공되는 인덱스 유형이며, 일반적인 데이터베이스 쿼리에서 많이 사용된다.
- Hash 인덱스
- Hash 인덱스는 데이터를 해시 함수를 사용하여 해시값으로 변환하고, 해당 해시값을 인덱스로 사용한다. Hash 인덱스는 해시값으로 검색이 이루어지기 때문에 검색 성능이 매우 뛰어나다는 장점이 있다. 하지만 데이터가 해시값으로 변환되기 때문에 정렬 기능을 사용할 수 없으며, 중복 데이터 처리에 대한 처리가 어려운 단점이 있다. 대부분의 데이터베이스에서는 Hash 인덱스를 별도로 지원하지 않으며, 일부 데이터베이스에서는 B-Tree 인덱스와 함께 사용된다.
- Full-Text 인덱스
- Full-Text 인덱스는 데이터베이스에서 텍스트 데이터를 검색할 때 사용되는 인덱스 유형이다. Full-Text 인덱스는 단어를 검색하기 위한 특수한 인덱스로, 검색 성능이 매우 뛰어나며, 전문 검색 시스템에서 많이 사용된다. Full-Text 인덱스는 일반적인 데이터베이스 쿼리에서는 사용되지 않으며, 특별한 검색 요구사항이 있는 경우에만 사용된다.
- Spatial 인덱스
- Spatial 인덱스는 공간 데이터를 저장하는 테이블에 대해 효율적인 검색을 지원하기 위해 생성되는 인덱스 유형이다. Spatial 인덱스는 공간 데이터를 처리하는 데 필요한 공간 연산을 수행하고, 공간 데이터를 인덱싱하여 공간 데이터 검색 속도를 높인다
- Clustered 인덱스
- Clustered 인덱스는 데이터베이스에서 데이터를 물리적으로 저장하는 방식에 따라 생성되는 인덱스 유형이다. Clustered 인덱스는 데이터를 정렬하여 물리적으로 저장하며, 인덱스와 데이터가 동일한 파일에 저장되기 때문에 빠른 검색 속도를 보장한다. 대부분의 데이터베이스에서는 하나의 테이블에 대해 하나의 Clustered 인덱스만 생성할 수 있다.
- Non-Clustered 인덱스
- Non-Clustered 인덱스는 Clustered 인덱스와 달리 인덱스와 데이터가 서로 다른 파일에 저장되는 인덱스 유형이다. Non-Clustered 인덱스는 데이터베이스에서 가장 일반적으로 사용되는 인덱스 유형으로, 검색 성능이 뛰어나며, 데이터 정렬 기능을 지원한다. 하나의 테이블에 여러 개의 Non-Clustered 인덱스를 생성할 수 있다.
- Unique 인덱스
- Unique 인덱스는 특정 컬럼의 값이 중복되지 않도록 유일성을 보장하기 위해 생성되는 인덱스 유형이다. Unique 인덱스는 검색 성능을 높이는 것보다 중복 데이터를 방지하기 위한 목적으로 사용된다.
- Composite 인덱스
- Composite 인덱스는 두 개 이상의 컬럼을 조합하여 인덱스를 생성하는 방식으로, 두 개 이상의 컬럼을 검색 조건으로 사용할 경우 효과적인 검색이 가능하다. 하나의 테이블에 여러 개의 Composite 인덱스를 생성할 수 있다.
인덱스의 장점
- 빠른 검색 속도: 인덱스를 이용하면 데이터를 더 빠르게 검색할 수 있다. 인덱스를 생성하면 데이터베이스는 인덱스를 사용하여 데이터를 찾아내므로 전체 데이터를 순차적으로 검색할 필요가 없다.
- 데이터 정렬: 인덱스는 데이터를 정렬하므로, 정렬된 데이터를 빠르게 읽을 수 있다.
- 중복 데이터 제거: 인덱스는 중복된 데이터를 제거하므로, 데이터의 무결성을 보장한다.
인덱스의 단점
- 인덱스를 유지하는 데에 시간이 걸린다. 데이터베이스에서 인덱스를 유지하려면 추가적인 시간과 자원이 필요하다.
- 인덱스를 생성할 수 있는 열의 수가 제한적이다. 인덱스를 생성할 수 있는 열의 수는 한정되어 있으므로, 모든 열에 대해 인덱스를 생성할 수는 없다.
- 인덱스 크기가 커질 수 있다. 인덱스는 데이터의 일부를 복제하여 저장하므로, 인덱스의 크기가 커질 수 있다. 따라서 인덱스의 크기를 고려하여 적절한 인덱스를 생성해야 한다.
'CS' 카테고리의 다른 글
#7. List, Set. Map, HashMap (0) | 2023.02.23 |
---|---|
#6. MSA(Micro Service Architechure) (0) | 2023.02.23 |
#4. DI(Dependency Injection) (0) | 2023.02.22 |
#3. REST API (0) | 2023.02.21 |
#2. 객체지향프로그래밍(OOP) (0) | 2023.02.21 |