RDBMS의 인덱스

어겐어갠·2022년 3월 30일
1

웹서핑을 하다가 RDBMS의 인덱스라는 키워드가 나와서 간략하게 찾아보았다.

인덱스

색인, 지표, 지수를 뜻하는 영단어로 DB에서는 이를 통해 검색 범위를 좁혀 테이블의 검색 속도 향상을 시킬 수 있다.

연산별 인덱스 관리

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

장점

조회 속도와 성능이 향상된다.
그로인해 시스템의 부하가 줄어든다.

단점

인덱스 관리를 위한 추가적 공간(10%)가 소모된다.
인덱스를 관리하기 위해 추가 작업이 필요하다.
오용의 경우 성능의 하락이 발생한다.

SELECT의 WHERE, JOIN에서 좋은 성능을 발휘할 수 있다.
(+ 오늘 들었던 강의에서는 select,delete,join 명령을 빠르게한다고한다. 아마도 delete 명령의 속도는 빨라지지만 그 사이드 이펙트로 자주사용하게되면 성능이 떨어지는 것이라고 생각된다.)

그러나 DELETE와 UPDATE 연산은 인덱스를 사용하지 않음 처리를 하므로 실제 데이터는 사용 데이터보다 많아지게되고 이때문에 자주 사용하게된다면 성능이 저하된다고 한다.
또 INSERT는 데이터 블록이 새로운 데이터를 받아들이기에 조금 부족한 경우 새로운 데이터 블록을 생성하기 때문에 그 과정에서 성능이 저하된다고 한다.

인덱스를 사용하면 좋은 경우

규모가 작지 않은 테이블
INSERT, UPDATE, DELETE가 자주 발생하지 않는 컬럼
JOIN이나 WHERE 또는 ORDER BY에 자주 사용되는 컬럼
데이터의 중복도가 낮은 컬럼

인덱스의 구현은 B+Tree로 이루어진다고한다.

B-Tree(Balanced Tree)의 확장형으로 브랜치 노드에 key만 담아두고, data는 담지 않는다. 오직 리프 노드에만 key와 data를 저장하고, 리프 노드끼리 Linked list로 연결되어 있다.
그러므로
1. 레벨이 높은 노드에서는 key값만 있으므로 공간확보를 더 할수 있고 -> 노드당 담을 수 있는 key의 숫자가 많아짐으로서 -> 트리의 높이를 낮출 수 있다.
2. 풀 스캔 시, B+tree는 리프 노드에 데이터가 모두 있기 때문에 한 번의 선형탐색만 하면 되기 때문에 B-tree에 비해 빠르다. B-tree의 경우에는 모든 노드를 확인해야 한다.

결합 인덱스를 구성하는 컬럼의 순서

결론 : 점, 선의 순서대로 구성하라. 긁어올 데이터를 줄이는 조건의 2가지 이상이라면, 가장 먼저 범위를 확 줄이고, 그 후 다음 조건을 적용하는게 성능의 향상에 도움이 될 것이다.

  • 1순위 : 컬럼이 사용한 연산자에 의한 인덱스 컬럼 선정
  • 2순위 : 랜덤 액세스를 고려한 인덱스 컬럼 선정
  • 3순위 : 정렬 제거를 위한 인덱스 컬럼 선정
  • 4순위 : 단일 컬럼의 분포도를 고려한 인덱스 컬럼 선정

https://mangkyu.tistory.com/96
http://www.gurubee.net/lecture/2229
https://zorba91.tistory.com/293
https://weejw.tistory.com/131

profile
음그래

0개의 댓글