DBMS MySQL - SQL8-1: 인덱스 개념

 안녕하세요. 알렉스 입니다. 이번에는 DBMS에서 인덱스에 대해서 글을 작성하도록 하겠습니다. 이번 글에서는 기본적인 인덱스에 대한 개념을 설명하고 다음 글에서는 실제 MySQL에서 인덱스를 이용하여 정렬및 검색을 하는지 알아보겠습니다.


사진1) 인덱스 예시

 인덱스는 일종에 검색을 편하기 위한  '찾아보기'로 생각하시면 됩니다. 만약 인덱스가 없다면 특정 정보를 찾기 위해서 책을 처음부터 끝까지 찾아봐야 합니다. 만약 검색 정보가 맨 앞에 있으면 금방 찾지만 가장 뒤에 있으면 가장 오랜 시간이 걸립니다.


 설사 인덱스를 만든다 하더라도 인덱스 사용유무는 MySQL에서 판단합니다. 만약 인덱스를 사용하지 않는다면 DB성능을 위해서 인덱스를 제거하는 것이 좋습니다.


사진2) DB와 통신

 인덱스를 이용하여 DB를 조회하면 빠르게 검색이 가능합니다. 하지만 인덱스가 많아지게 되면 DB성능에 문제가 생길수 있습니다. 


사진3) 클러스터형과 보조 인덱스

 MySQL에서 인덱스를 크게 클러스터형과 보조형 인덱스로 나눌수 있습니다. 클러스터형 인덱스는 사전과 비슷합니다. 그리고 한개의 Table에서 column 하나만 생성할수 있습니다. 클러스터형 인덱스를 생성하면 해당 컬럼은 자동으로 정렬이 됩니다.

 반면 보조 인덱스는 일종의 색인과 같습니다. 따라서 클러스터형 인덱스처럼 자동으로 정렬하지 않습니다. 하지만 검색시 도움을 줍니다.

하지만 인덱스는 DB의 성능에 영향을 줄수 있습니다. 인덱스는 테이블의 약 10%의 데이터 공간을 차지하고 기존의 테이블에 인덱스를 생성할시 시간이 걸립니다. 특히 SELECT(조회)외 INSERT, UPDATE, DELETE를 자주 하게 되면 성능이 나빠집니다. 이는 다음 글에서 설명하도록 하겠습니다.

댓글

이 블로그의 인기 게시물

Lesson 12_1 프로퍼티 노드(Property Node)

DAQ로 전압 측정하기-2

Lesson 12_2 참조를 이용한 프로퍼티노드(Property Node)