인덱스(Index)
데이터베이스 테이블에 대한 검색 성능의 속도를 높여주는 자료구조를 말한다. 쉽게 말해 책에서 원하는 내용을 찾을 때 책의 모든 페이지를 찾아보는 것은 시간이 많이 걸리기 때문에 책의 저자들은 목차를 추가하는데 이러한 색인에 데이터베이스의 Index와 같다.
인덱스(Index) 장점
- 테이블 정렬이 되어 있어 조건검색(where)절에 맞는 데이터들을 빠르게 찾아낼 수 있고 MIN,MAX의 효율적인 처리가 가능하다.
- ORDER BY에 의한 sort 과정을 피할 수 있어 전반적인 시스템 부하를 줄일 수 있다.
- 테이블을 조회하는 속도와 그에 따른 성능을 향상 시킬 수 있다.
인덱스(Index) 단점
- 항상 정렬을 유지해 줘야 한다.
- 인덱스를 관리하기 위한 추가 작업과 DB에 약 10%에 해당되는 저장공간이 필요하다.
- 인덱스를 잘못 사용할 경우 오히려 성능이 저하되는 역효과가 발생할 수 있다.
인덱스(Index)관리
항상 정렬된 상태를 유지해야 되기 때문에 인덱스가 적용 된 컬럼에 INSERT, UPDATE, DELETE가 수행 된다면 계속 정렬이 필요하고, 그에 따른 부하가 발생하기 때문에 아래와 같은 방법을 사용한다.
- INSERT : 새로운 데이터에 대한 인덱스를 추가한다.
- UPDATE : 삭제하는 데이터의 인덱스를 사용하지 않는다는 작업을 진행한다.
- DELETE : 기존의 인덱스를 사용하지 않음 처리하고, 갱신 된 데이터에 대해 인덱스를 추가한다.
인덱스(Index) 사용 시 좋은 경우
- 규모가 작지 않은 테이블의 경우
- INSERT, UPDATE, DELETE가 자주 발생하지 않는 컬럼의 경우
- 데이터의 중복도가 낮은 컬럼의 경우(분포도가 좋은 경우)
- 조인 조건으로 자주 사용되는 컬럼의 경우
- 조건절에 자주 등장하는 컬럼의 경우
인덱스(Index) 자료구조
대표적인 자료구조로는 해시 테이블과 B+Tree가 있다.
- 해시 테이블(Hash Table)
key와 value로 데이터를 저장하는 자료구조로 빠른 데이터 검색이 필요할 때 유용하며 key값을 이용해 고유한 index를 생성하여 그 index에 저장 된 값을 꺼내오는 구조이다.
해시 테이블 기반 DB인덱스의 경우 (데이터=컬럼의 값, 데이터 위치)를 (key,value)로 사용하여 컬럼의 값으로 생성된 해시를 통해 인덱스를 구현한다. 하지만 해시의 경우 등호(=) 연산에만 특화되었기 때문에 값이 1이라도 달라지면 완전 다른 해시값을 생성하는 특성에 의해 부등호 연산이 자주 사용되는 데이터 베이스 검색을 위해서는 적합하지 않다.
- B+Tree
B+Tree는 DB의 인덱스를 위해 자식 노드가 2개 이상인 B-Tree를 개선시킨 자료구조이다.
오직 leaf node에만 데이터를 저장하고 leaf node가 아닌 node에서는 자식 포인터만 저장한다. leaf node끼리는 Linked list로 연결 되어 있다.
Linked list를 이용하여 순차 검색을 효율적으로 할 수 있다.
🙇 참고 사이트 🙇
https://mangkyu.tistory.com/96 https://coding-factory.tistory.com/746