[CS] SQL - INDEX

히수·2023년 4월 5일
2

CS

목록 보기
7/13

INDEX

인덱스(Index)는 데이터베이스의 테이블에 대한 검색 속도를 향상시켜주는 자료구조이다 .

인덱스는 목차 , 색인 이라고 생각하면 편하다.

테이블의 특정 컬럼에 인덱스를 생성하면 해당 컬럼의 데이터를 정렬한 후 별도의 메모리 공간에 데이터의 물리적 주소와 함께 저장된다.



INDEX의 장단점

🔵 장점

  1. 테이블을 검색하는 속도와 성능이 향상된다.
  2. 시스템의 전반적인 부하를 줄일 수 있다.
  3. 인덱스에 의해 데이터들을 정렬된 형태를 갖는다.

🟠 단점

  1. 인덱스를 관리하기 위한 추가 작업이 필요하다.
  2. 추가 저장 공간이 있어야한다.
  3. 잘못 사용하는 경우에 오히려 검색 성능이 저하된다.

데이터의 수정이 잦은경우 인덱스도 같이 수정해야하기 때문에 성능이 낮아진다. 또한 인덱스를 제거 하는것이 아니라 사용하지 않음 으로 남겨두기 때문에 수정이 많을 경우 실제 데이터에 비해 인덱스가 과도하게 커지는 문제점이 발생할 수 있다.



Index의 효율적 사용

  1. 규모가 큰 테이블
  2. 삽입(INSERT), 수정(UPDATE), 삭제(DELETE) 작업이 자주 발생하지 않는 컬럼
  3. WHERE나 ORDER BY, JOIN 등이 자주 사용되는 컬럼
  4. 데이터의 중복도가 낮은 컬럼

예를 들어 나이나 성별과 같이 값의 범위가 적은 컬럼인 경우에는 인덱스를 읽고 나서 다시 많은 데이터를 조회해야 하기 때문에 비효율적인 작업이다.



Index의 자료구조

인덱스는 자료구조를 이용해서 구현할 수 있다.

1. 해시 테이블(Hash Table)

해시 테이블은 keyvalue를 한 쌍으로 데이터를 저장하는 자료구조이다. (key, value)로 쌍을 표현하며, key값을 이용해 대응되는 value값을 구하는 방식이다. 평균적으로 O(1)의 매우 빠른 시간만에 원하는 데이터를 탐색할 수 있는 구조이다.

해시 테이블을 이용한다면 인덱스는 (key, value) = (컬럼의 값, 데이터의 위치)로 구현하는데, 해시 테이블은 실제로 인덱스에서 잘 사용되지 않는다.

그 이유는, 해시 테이블은 등호(=) 연산에 최적화되어있기 때문이다. 데이터베이스에선 부등호(<, >) 연산이 자주 사용되는데, 해시 테이블 내의 데이터들은 정렬되어 있지 않으므로 특정 기준보다 크거나 작은 값을 빠른 시간 내에 찾을 수가 없다.

2. B+Tree

B+Tree는 기존의 B-Tree의 단점을 개선시킨 자료구조이다.

B+Tree는 오직 leaf node에만 데이터를 저장하고 leaf node가 아닌 node에서는 자식 포인터만 저장한다.

그리고 leaf node끼리는 Linked list로 연결되어있다.

또, B+Tree에서는 반드시 leaf node에만 데이터가 저장되기 때문에 중간 node에서 key를 올바르게 찾아가기 위해서 key가 중복될 수 있다는 단점도 있다.

데이터베이스의 인덱스 컬럼은 부등호를 이용한 순차 검색 연산이 자주 발생될 수 있다. 이러한 이유로 BTree의 리프노드들을 LinkedList로 연결하여 순차검색을 용이하게 하는 등 BTree를 인덱스에 맞게 최적화하였다.


profile
🔥

4개의 댓글

comment-user-thumbnail
2023년 4월 6일

인덱스의 장단점, 간단한 내부구조를 알 수 있었습니다. 감사합니다.

답글 달기
comment-user-thumbnail
2023년 4월 6일

이전에 해시, B-tree를 최근에 한번 공부했어서 이해하는데 더 도움이 됐습니다.

답글 달기
comment-user-thumbnail
2023년 4월 6일

인덱스를 사용했을 때의 장단점에 대해서 알게되어 도움이 되었습니다.

답글 달기
comment-user-thumbnail
2023년 4월 6일

인덱스의 장단점과 자료구조에대해 자세히 알 수 있어서 좋았습니다!

답글 달기