본문 바로가기

CS(Computer Science)

CS Study 5주차 : Index(인덱스)

Index(인덱스)

데이터베이스에서 데이터를 검색할 때 모든 데이터를 검색해서 원하는 결과를 찾으려면 시간이 오래 걸린다.

때문에 컬럼의 값과 해당 레코드가 저장된 주소를 키와 값의 쌍으로 인덱스를 만들어 두어 데이터 검색 속도를 향상시킨다.

즉, 데이블에 대한 동작속도를 높여주는 자료구조이다.

 

원리

Index를 해당 컬럼에 주게 되면 초기 Table 생성 시 FRM, MYD, MYI 3개의 파일이 만들어진다.

  • FRM : 테이블 구조가 저장되어 있는 파일
  • MYD : 실제 데이터가 있는 파일
  • MYI : Index 정보가 들어있는 파일

Index를 사용하지 않는 경우에는 MYI 파일이 비어 있지만 Index를 해당 컬럼에 만들게 되면 해당 컬럼을 따로 인덱싱하여
MYI 파일에 입력한다.

이후 사용자가 Index를 사용하는 쿼리로 검색을 하게 되면 테이블을 검색하는 것이 아닌 MYI 파일의 내용을 검색한다.

 

 

장점

  • 키 값을 최초로하여 테이블에서 검색과 정렬 속도를 향상시킨다.
  • 인덱스를 사용하면 테이블 행의 고유성을 강화시킬 수 있다.
  • 테이블의 기본 키는 자동으로 인덱싱된다.
  • 필드중에는 테이블 형식 때문에 인덱싱 할 수 없는 필드도 있다.
  • 여러 필드로 이루어진 다중 필드 인덱스를 사용하면 첫 필드 값이 같은 레코드도 구분할 수 있다.

 

단점

  • 인덱스를 만들면 ,mdb 파일 크기가 늘어난다.
  • 사용자가 한 페이지를 동시에 수정할 수 있는 병행성이 줄어든다.
  • 인덱스된 필드에서 데이터를 업데이트를 하거나 레코드를 추가 또는 삭제할 때 성능이 떨어진다.
  • 인덱스가 데이터베이스 공간을 차지해 추가적인 공간이 필요하다.
  • 데이터 변경 작업이 자주 일어나는 경우에 인덱스를 재작성해야 할 필요가 있기 때문에 성능에 영향을 끼칠 수 있다.

 

 동작 예시

아래 그림은 id=106인 학생을 검색하는 과정이다.

  • Index를 이용하면 index block 1 -> (Index block 2) -> data block -> 2번째 레코드 이렇게 탐색을 하면 총 I/O는 2~3번 일어나게 된다.
  • Index를 사용하지 않으면 최선의 경우 data block 3에 엑세스 하게 되여 한번의 I/O으로 검색을 성공하겠지만, 최악의 경우 여러개의 data block을 스캔해야 할 수도 있다.

Index는 data는 별개로 저장이 되는데 data 파일 레코드를 저장하는 것에 비해 공간을 덜 차지하기 때문에 Index blcok에 데이터가 더 많이 저장되어 Index를 full scan하는 것이 data를 full scan하는 것보다 부담이 덜 하다.

 

 


참고

CS 기초 - 데이터베이스

Clustered Index와 Secondary Index