[데이터베이스] 인덱스


데이터베이스 인덱스

인덱스는 데이터베이스 분야에 있어서 테이블에 대한 동작의 속도를 높여주는 자료구조를 일컫는다.

인덱스는 키 값으로 행 데이터의 위치를 식별하는데 사용하는 기능입니다.

그러기 위해서는 원본 테이블을 기준으로 잘 정렬된 별도의 테이블, 즉 인덱스 테이블을 생성해야하고, 이로 인해 데이터 엑세스 성능을 높일 수 있습니다.

인덱스의 존재 유무에 따라 쿼리의 결과는 달라지지 않습니다.

인덱스를 효과적으로 사용하려면 정규화가 되어 있어야 합니다.

정규화가 되어 있지 않은 테이블은 컬럼이 많으며, 이에 따라 조합할 수 있는 인덱스가 많아지게 됩니다.

인덱스가 많으면, 갱신 성능이 나빠지고 디스크 공간도 많아지므로 인덱스를 효과적으로 사용하려면 정규화가 잘 되어 있어야 합니다.

특징

  • MySQL에서 테이블을 생성할 때 특정 칼럼을 PK로 설정하면, 그 컬럼에 대한 인덱스 테이블을 자동으로 만듭니다.
  • 인덱스 테이블은 일반 테이블과 같이 데이터베이스 객체 입니다.
  • 인덱스 테이블만으로는 아무런 기능을 할 수 없기 때문에 다른 테이블에 의존적입니다.

장점

  • 키 값을 기초로 하여 테이블에서 검색과 정렬속도를 향상시킵니다.
  • 인덱스를 사용하면 테이블 행의 고유성을 강화시킬 수 있습니다.
  • 테이블의 기본 키는 자동으로 인덱스 됩니다.
  • 필드 중에는 데이터 형식 때문에 인덱스 될 수 없는 필드도 있습니다.

단점

  • 인덱스를 만들면 .mdb 파일 크기가 늘어난다.
  • 여러 사용자 응용프로그램에서 여러 사용자가 한페이지를 동시에 수정할 수 있는 병행성이 줄어든다.
  • 인덱스 된 필드에서 데이터를 업데이트하거나, 레코드를 추가 또는 삭제할 때 성능이 떨어집니다.
  • 인덱스를 생성하는데 시간이 많이 소요될 수 있다.
  • 데이터의 변경작업이 자주 일어날 경우에는 인덱스를 재작성해야 할 필요가 있기에 성능에 영향을 끼칠 수 있다.
    • DML문에 취약하다.

Reference

  • https://victorydntmd.tistory.com/319


on Cs, Database, Db