MySQL을 기준으로 작성한 내용입니다!
인덱스는 '데이터베이스에서 데이터를 빠르게 찾기 위한 도구'다. 인덱스를 생성하고, 인덱스를 사용하는 SQL문을 만들어 사용한다면 빠르게 응답을 받을 수 있으며, 서버에서도 적은 양의 일을 처리하게 되므로 전체 시스템의 성능이 향상되는 효과를 얻을 수 있다.
인덱스를 사용하여 얻을 수 있는 장·단점은 다음과 같다.
장점
단점
그러므로 인덱스는 DB 변경 작업이 적고 검색 쿼리문(특히 SELECT)을 많이 사용하는 경우에 사용하는 것이 좋다.
MySQL에서 사용되는 인덱스의 종류는 크게 두 가지로 나누어지는데, 각각 클러스터형 인덱스Clustered Index와 보조형 인덱스Secondary Index다.(다른 DB에서는 보조형 인덱스를 비(非)클러스터형 인덱스라고도 한다.)
클러스터형 인덱스
보조형 인덱스
출처 : https://ko.wikipedia.org/wiki/B_%ED%8A%B8%EB%A6%AC
B-tree는 Binary tree를 확장한 개념으로 하나의 부모 노드가 2개 이상의 자식 노드를 가지는 데이터 구조로, 대부분의 관계형 DBMS에서 인덱스를 생성하는데 사용한다.
MySQL에서 노드의 개념을 페이지라고 하는데, 페이지는 16KB 크기를 가지는 최소한의 저장 단위다. 그러므로 작은 데이터 하나를 저장하더라도 한 페이지를 모두 사용하게 된다.
B-tree를 인덱스를 생성하기 위한 데이터 구조로 사용함으로써 검색 작업의 속도가 빨라진다는 장점이 있는 반면, 입력/수정/삭제 작업의 속도는 느려진다는 단점이 있다고 앞에서 언급했었다. 특히 입력 작업 시에 속도가 매우 느려지는데, 이는 데이터를 입력하는 과정에서 현재 페이지의 공간을 모두 사용하면 새로운 페이지를 생성한 뒤에 새 페이지에 데이터를 입력하기 때문이다. 이러한 과정을 페이지 분할이라고 한다.