1. index란?
- DB에서 데이터를 빠르게 검색하고 조회하기 위한 자료구조
- index는 특정 칼럼 또는 칼럼 조합에 대한 값과 해당 값이 존재하는 테이블 내의 물리적인 위치를 매핑한다.
- DB성능을 향상시키는 데 중요한 역할
- Full Scan 하지 않고 데이터를 찾을 수 있다.
- 주로 SELECT문 에서 WHERE절에 사용되는 칼럼 혹은 JOIN에 사용되는 칼럼에 생성하는 것이 일반적이다.
2. index 알고리즘 종류
- B-Tree
- B+Tree
- Hash Index
- Bitmap Index
- R-Tree
일반적으로 사용 하는 알고리즘은 B-Tree와 B+Tree인데, 특히 B+Tree는 대다수의 관계형 데이터베이스 관리 시스템(RDBMS)에서 기본 인덱스 구조로 채택되고 있다.
B-Tree는 이진트리에서 발전되어 모든 리프노드들이 같은 레벨을 가질 수 있도록 자동으로 밸런스를 맞추는 트리입니다.
정렬된 순서를 보장하고 멀티레벨 인덱싱을 통한 빠른 검색을 할 수 있습니다.
B-Tree는 순차검색이 힘들기 때문에 B+Tree가 등장하였다.
B+Tree는 리프노드들이 연결리스트 형태로 연결되어 있기 때문에 순차 접근이 매우 빠르다는 특성이 있다.
3. index를 잘못 사용한 경우
<참고 : SQL안티패턴 책 >
- index를 불충분하게 정의하거나 아예 정의하지 않음
- 너무 많은 index 를 정의하거나 도움이 되지 않는 index를 정의함
- 어떤 index도 도움이 될 수 없는 쿼리를 실행함
없는 index
index를 최신 상태로 유지하는 데 DB에 오버헤드가 있다.
INSERT,UPDATE,DELETE 사용할 때 DB는 index 데이터 구조를 업데이트 해야함. 테이블을 일관적으로 유지해 이후 index를 사용해 올바른 행 집합을 제대로 검색할 수 있기 위함.
오버헤드가 무조건 낭비는 아니다.
일반적으로 어플리케이션은 한번 업데이트 할 때 조회는 100번 할 것이다.
index를 사용하는 쿼리를 실행 할 때 마다 index 유지를 위한 오버헤드가 들어도 그것보다 많은 이득을 얻는다.
또한, index 는 DELETE와 UPDATE에서도 WHERE절을 사용하는 경우에는 도움이 된다.
index 가 없는 칼럼으로 검색하는 경우에는 Full table scan을 수행하게 된다.
너무 많은 index
사용하지 않는 너무 많은 index는 오버헤드만 초래할 뿐이다.
index가 도움이 안되는 경우
index 는 전화번호부 책과 같다.
전화번호부 책에서 성으로 시작하는 사람을 찾아려면 쉬운일이지만, 같은 이름인 사람만 찾게 된다면 책 전체를 확인해야한다.
전화번호부는 성, 이름 순으로 나열하기 때문에 DB에서 lastname,firstname 으로 된 복합 index 와 같다.
이런경우 이름으로 검색할 때는 도움이 되지 않는다.
'Backend · Infra' 카테고리의 다른 글
[ElasticSearch] nested Type (0) | 2024.07.10 |
---|---|
[ElasticSearch] Query (0) | 2024.07.09 |
싱글톤 패턴 Singleton Pattern (0) | 2024.07.09 |
MSA (Microservice Architecture) (0) | 2024.07.03 |
Node.js 란? (0) | 2024.06.23 |