Index

데이터베이스 인덱스란 RDBMS에서 대용량 데이터가 있을 때, 특정 데이터를 검색하기 위해서 테이블의 레코드를 full scan하는 것이 아니라, 인덱스가 적용된 컬럼의 테이블(컬럼, 인덱스)를 따로 저장해놓고 그것을 검색해서 검색 효율을 높이는 방법이다.

Full Table Scan

  • Row 값을 순차적으로 scan하여 값을 비교한다.

  • 가장 느린 scanning 방법이며, 자원을 많이 사용한다. 즉, 속도도 느리고 자원을 많이 사용하는 좋지않은 방법이다.

  • 이러한 문제를 해결하기 위해 DB에서 Index 기능을 제공한다.

Database Index

읽기 성능을 향상시키기 위한 일종의 자료구조이다. Index는 관련된 Table과 별도로 저장되며, Index로 설정한 컬럼값이 변경되거나 추가되면, Index도 업데이트가 동시에 된다.

  • RDBMS에서 사용하는 Index는 Balance Search Tree를 사용한다. (B-Tree 혹은 B+ Tree를 사용)

특징

  • 키 값을 기초로 해 테이블에서 검색과 정렬 속도를 향상시킨다.

  • 질의나 보고서에서 그룹화 작업의 속도를 향상시킨다.

  • 테이블의 기본 키(PK)는 자동으로 인덱스된다.

  • 필드 중에서 데이터 형식 때문에 인덱스 될 수 없는 필드도 있다.

  • 다중 필드 인덱스를 사용하면, 첫 필드 값이 같은 레코드도 구분할 수 있다.

주의할 점

  • 인덱스 된 필드에서 데이터를 업데이트하거나, 레코드를 추가, 삭제할 때 성능이 떨어진다.

  • 인덱스가 데이터베이스 공간을 차지해 추가적인 공간이 필요해진다.

  • 인덱스를 생성하는데 시간이 많이 소요될 수 있다.

  • 데이터 변경이 자주 일어날 경우 인덱스를 재작성해야 할 필요가 있기 때문에 성능에 영향을 끼칠 수 있다.

목적

SELECT 쿼리의 WHERE절이나 JOIN 예약어를 사용했을때만 인덱스가 사용되며 SELECT 쿼리의 검색 속도를 빠르게 하는데 목적이 있다.

언제 생성해야할까?

  • WHERE절에서 사용되는 컬럼을 인덱스로 만든다.

  • 데이터의 중복도가 높은 열은 인덱스로 만들어도 효용이 없다.(동일 값이 적은 컬럼 1~15%이하, 5%이하)

  • 외래키가 사용되는 열에는 인덱스를 되도록 생성해주는 것이 좋다.

  • JOIN에 자주 사용되는 열에는 인덱스를 생성해주는 것이 좋다.

  • INSERT/UPDATE/DELETE가 얼마나 자주 일어나는지 고려해야한다.

종류

  • Unique Index : PK나 Unique 제약조건을 정의할 경우에는 Unique Index가 자동으로 생성된다.

  • Non UNIQUE INDEX : 중복되는 데이터가 들어가야하는 경우

  • Function Based INDEX ( FBI - 함수기반 인덱스 )

  • DESCENDING INDEX : 내림차순으로 인덱스를 생성한다. 큰 값을 많이 조회하는 SQL에 생성하는 것이 좋다.

    • 계좌 내역 최근 날짜부터 조회, 회사 매출

  • 결합인덱스(Composite Index) : 인덱스 생성시 두 개 이상의 컬럼을 합쳐서 인덱스 생성

    • 주로 where 조건 컬럼이 2개 이상이 and로 연결되어 사용되는 경우에 많이 사용한다. ( 잘못 생성하게 되는 경우 성능에 나쁜 영향을 미친다. )

참고

Last updated