본문 바로가기
Computer-Sience/Database

[Database] Index

by dev_ss 2023. 2. 12.

Index :

데이터베이스는 관련 레코드를 찾기 위해 전체 테이블을 스캔해야 하고,

이는 특히 테이블이 매우 큰 경우 매우 느리고 비효율적일 수 있기에 Index를 사용하게 된다.

 

Index는 테이블의 특정 Column 또는 Field를 기반의 데이터를 빠르게 검색할 수 있는

데이터 구조이며, 일반적으로 B tree(Balance Tree) Algorithm에 의하여 Index가 생성이 된다.

 

[Index 생성에 기반이 되는 알고리즘이 다수 존재]

 

페이지의 내용을 기반으로 특정 페이지를 빠르게 찾을 수 있는 책의 색인과 유사하다.

 

인덱스가 효율적인 이유는 대수확장성을 들 수 있으며, 이는 트리 깊이가 리프 노드 수에 비해

매우 느리게 성장하는 것을 말한다.

 

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


종류 :

인덱스는 테이블에 있는 하나 이상의 열에서 생성되며, Cluster Index / Non-Cluster Index로 나뉜다.

  • Cluster Index : 인덱싱 된 열을 기반으로 테이블에서 데이터의 물리적 순서를 결정
  • Non-Cluster Index : 인덱싱 된 데이터의 위치를 ​​가리키는 별도의 데이터 구조를 생성

Pros :

1. 향상된 쿼리와 빠른 데이터 검색 :

 

인덱스 사용의 주요 이점 중 하나는 향상된 쿼리 성능이다.

일반적으로 사용되는 열에 인덱스를 생성함으로써 데이터베이스는

전체 테이블을 스캔하는 대신 관련 데이터를 빠르게 찾을 수 있다.

이는 실시간 데이터 액세스가 필요한 애플리케이션에게 큰 장점으로 볼 수 있다.

 

2. 최적화된 데이터 수정 :

 

인덱스는 삽입, 업데이트 및 삭제와 같은 데이터 수정 작업을 지연시킬 수 있지만,

업데이트해야 하는 데이터의 양을 줄여 작업을 최적화할 수 있다.

 

ex)  Record를 업데이트할 때, DB에서 전체를 스캔하여 업데이트가 것이 아닌 특정 인덱스 항목만 업데이트

 

3. 동시성 향상 : 

 

인덱스는 공유 리소스에 대한 경합을 줄이고 이는 데이터베이스 동시성을 향상할 수 있다. 

여러 트랜잭션이 인덱스의 다른 부분에 동시에 액세스할 수 있도록 함으로써 데이터베이스는

더 많은 동시 사용자 및 트랜잭션 지원이 가능하다는 것이다.

 

Cons :

1. 디스크 공간 및 메모리 사용량 증가 :

 

인덱스는 특히 열이 많은 대형 테이블의 경우 상당한 양의 디스크 공간과 메모리를 필요로 한다.

이는 디스크나 메모리와 관련하여 제약이 있는 데이터베이스의 경우 특히 문제를 발생할 수 있다.

 

2. 느린 데이터 수정 :


인덱스는 데이터 수정 작업을 최적화할 수 있지만, 데이터베이스가 인덱스와

기본 데이터까지 업데이트하도록 필요로 하기 때문에, 데이터 수정에 오래 걸릴 수 있다.

 

3. 인덱스 유지 관리 필요성 :


시간이 지나고, 데이터와 그와 관련된 쿼리들이 변경되면서 인덱스의 효율성이 떨어질 수 있다.

이는 인덱스를 통한 이점이 있는지 정기적인 모니터링과 유지 관리가 필요하다는 것이다.

 

4. 인덱스 남용의 가능성 :


인덱스를 너무 많이 만들거나 잘못된 유형의 인덱스를 생성하면 인덱스를 유지 관리하는데

필요한 오버헤드가 증가하여 실제로 성능이 저하될 수 있기 때문에,

인덱스는 특정 요구 사항에 맞춰서 신중하게 고려하고 설계하여 생성해야 한다는 것이다.

반응형

'Computer-Sience > Database' 카테고리의 다른 글

[Database] N + 1  (0) 2023.04.12
[Database] 이상 / 정규화 / 반정규화  (0) 2023.04.11
[Database] Transaction(트랜잭션)  (0) 2023.02.11