[Database] Index

ggg9_·2020년 12월 9일
0

인덱스란? 말 그대로 색인이라고 할 수 있다. DBMS도 데이터베이스 테이블의 모든 데이터를 검색해서 원하는 결과를 가져 오려면 시간이 오래 걸리기 때문에 칼럼의 값과 해당 레코드가 저장된 주소(row_id)를 키와 값의 쌍으로 인덱스를 만들어 두는 것이다.

인덱스(Index)

  • 데이터베이스 테이블에 대한 동작의 속도를 높여주는 자료 구조를 말한다.
  • 테이블 내의 1개 또는 여러 개의 컬럼을 이용하여 생성될 수 있다.
  • 빠른 검색 동작뿐만 아니라 레코드 접근과 관련된 효율적인 순서 매김 동작에 대한 기초를 제공한다.
  • 인덱스를 저장하는데 필요한 디스크 공간은 테이블을 저장하는 데 필요한 디스크 공간보다 작다.
    👉 인덱스는 키-필드만 갖고 있고 다른 세부 항목들은 갖고 있지 않기 때문
  • 관계형 데이터베이스에서 인덱스는 테이블에 대한 하나의 사본이다.
  • 일반적으로 사용되는 인덱스 알고리즘은 B+-Tree 알고리즘이다.

성능과 고려사항

모든 컬럼에 INDEX를 생성해두면 빨라지지 않을까?
👉 NOPE ! 🙅🏻

  • INDEX를 생성하게 되면 쿼리문을 실행할 때 별도의 과정이 추가적으로 발생한다.
    INSERT 인덱스에 대한 데이터도 추가해야 하므로 성능에 손실이 따른다.
    DELETE 인덱스에 존재하는 값은 삭제되지 않고 사용하지 않는다는 표시 즉, row의 수는 그대로 남게된다.
    UPDATE 의 경우 위 두가지 문제점을 동시에 수반한다.
  • 데이터 형식에 따라 악영향을 미칠 수 있다.
    ex 10,000 레코드에 해당하는 테이블에 대해 2,000 단위로 인덱스를 생성할 경우 값의 range가 적은 필드는 인덱스를 읽고 다시 한번 디스크 I/O가 발생하기 때문에 비효율적이다.

0개의 댓글