본문 바로가기
DB

인덱스란 ?

by y00ns00 2021. 8. 3.

인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조

 

만약 우리가 책에서 원하는 내용을 찾는다고 하면 책의 모든 페이지를 찾아보는것은 오랜 시간이 걸린다.

그렇기 때문에 책의 저자들은 책의 맨앞 또는 맨뒤에 색인을 추가하는데 데이터베이스의 index는 책의 색인과 같다.

데이터베이스에서도 테이블의 모든 데이터를 검색하면 시간이 오래 걸리기 때문에 데이터와 데이터의 위치를 포함한 자료구조를 생성하여 빠르게 조회할 수 있도록 돕는다.

 

인덱스를 활용하면, 데이터를 조회하는 SELECT 외에도 UPDATE나 DELETE의 성능이 함께 향상된다.

그러한 이유는 해당 연산을 수행하려면 해당 대상을 조회해야만 작업을 할 수 있기 때문이다.

// Mang이라는 이름을 업데이트 해주기 위해서는 Mang을 조회해야 한다. UPDATE USER SET NAME = 'MangKyu' WHERE NAME = 'Mang';

 

만약 index를 사용하지 않은 컬럼을 조회해야 하는 상황이라면 전체를 탐색하는 Full Scan을 수행해야 한다. Full Scan은 전체를 비교하여 탐색하기 때문에 처리 속도가 떨어진다.

[ 인덱스(index)의 관리 ]

DBMS는 index를 항상 최신의 정렬된 상태로 유지해야 원하는 값을 빠르게 탐색할 수 있다. 그렇기 때문에 인덱스가 적용된 컬럼에 INSERT, UPDATE, DELETE가 수행된다면 각각 다음과 같은 연산을 추가적으로 해주어야 하며 그에 따른 오버헤드가 발생한다.

  • INSERT: 새로운 데이터에 대한 인덱스를 추가함
  • DELETE: 삭제하는 데이터의 인덱스를 사용하지 않는다는 작업을 진행함
  • UPDATE: 기존의 인덱스를 사용하지 않음 처리하고, 갱신된 데이터에 대해 인덱스를 추가함
  •  

인덱스 의 장점과 단점

장점

  • 테이블을 조회하는 속도와 그에 따른 성능을 향상시킬 수 있다.
  • 전반적인 시스템의 부하를 줄일 수 있다.

단점

  • 인덱스를 관리하기 위해 약 10%에 해당하는 저장공간이 필요하다.
  • 인덱스를 관리하기 위해 추가 작업이 필요하다
  • 인덱스를 잘못 사용할 경우 오히려 성능이 저하되는 역효과가 발생할 수 있다.

Index 데이터구조 성능 정리

index datastructure B-Tree Hash
=조회 Average: O(logN)
worst : O(logN)
Average : O(1)
wordst :  O(N)
<,> range 조회 O(logN+M) 사용불가
데이터 삽입 Average: O(logN)
worst : O(logN)
Average : O(1)
wordst :  O(N)
데이터 삭제 Average: O(logN)
worst : O(logN)
Average : O(1)
wordst :  O(N)

 

B트리 Index

range query가 빈번할 경우 매우 유리하다

range query에 사용되는 데이터의 시작점과 끝점을 찾으면

그 사이에 해당하는 데이터들을 tree traversal(중위순회) 알고리즘으로 바로 가져올 수 있기 때문

Hash Index

Hash index를 생성시 equality 쿼리의 경우는 매우 빠른시간안에 찾을 수 있다

range query의 경우 hash index는 사용되지 않는다.

해시버킷에 저장된 순서와 실제 row의 순서에 연관이 없기 때문이다.

index를 생성 시 고려해야할 것

  • index를 생성하면, 데이터의 생성시 추가적인 연산이 필요하다 B-Tree의 경우 Balanced Tree에서의 모든 연산은 O(logn) 이다. Hash Table의 경우 모든 연산이 O(1) 이지만, 해시테이블의 상태에 따라 달라질 수 있다.
  • range query가 필요하다면 B-tree index를 생성, equality query만 필요하다면 hash index가 유리하다

'DB' 카테고리의 다른 글

NoSQL  (0) 2021.07.24
Redis란? 왜 사용할까?  (0) 2021.07.24
트랜잭션과 트랜잭션의 특징  (0) 2021.06.29

댓글