본문 바로가기

CS

[ DB - 3 ] 인덱싱(Indexing)이란? : 인덱싱을 하는 이유

반응형

💡 [DB] 이전 글 다시 보기

[ DB - 2 ] 트랜잭션(Transaction): 데이터 무결성이란

[ DB -1 ] 관계형 데이터베이스(RDB)와 NoSQL의 차이점


 


📍 인덱싱(Indexing)이란?

 

  • 데이터베이스에서 검색 속도를 향상시키기 위해 특정 컬럼에 적용하는 기법이다.
  • 데이터를 효율적으로 조회할 수 있도록 추가적인 자료구조를 생성하여 테이블의 특정 열을 기반으로 빠르게 접근한다.

 


📍 인덱스의 특징

  • 주요 목적
    • 대규모 테이블에서 검색 속도를 높이기 위해 사용된다.
    • 특히, 자주 조회되는 컬럼(조건문, 정렬 등에 사용)에 인덱스를 적용한다.
  • 자료구조
    • 일반적으로 B-Tree 자료구조를 사용하여 구현된다.
    • B+-Tree는 B-Tree의 변형으로 검색 성능이 더 빠르지만, 수정, 삭제 시 오버헤드가 더 크다.
     

인덱싱

  • 사용 조건
    • 삽입, 삭제, 수정이 자주 발생하지 않는 테이블에서 효과적이다.
    • 조건(query)에 따라 검색 속도는 달라질 수 있다.
  • 저장 방식
    • 데이터는 파일 형태로 저장되며, SSD 등에 기록된다.
    • 선형 구조(순차 검색)에서는 검색 시 최악의 경우 모든 데이터를 확인해야 하지만,
      인덱스를 활용하면 이진 트리처럼 비교하며 검색 속도를 향상시킬 수 있다.

 


📍 인덱싱의 장점

  1. 검색 속도 향상
    • 대규모 데이터에서 특정 레코드를 빠르게 찾을 수 있다.
    • 이진 트리 구조(B-Tree, B+-Tree)를 활용하여 효율적으로 데이터에 접근 가능.
  2. 쿼리 성능 개선
    • WHERE, ORDER BY, GROUP BY 절 등에서 자주 사용되는 컬럼에 대해 성능을 크게 향상시킨다.

 


📍 인덱싱의 단점 및 한계

  1. 추가적인 메모리 소모
    • 인덱스를 유지하기 위한 메모리와 디스크 공간이 추가로 필요하다.
  2. 오버헤드 발생
    • 데이터 수정, 삭제 시 인덱스까지 재계산해야 하므로, 추가적인 연산 비용이 발생한다.
    • 인덱스가 많아지면 삽입, 삭제, 업데이트 성능이 저하될 수 있다.
  3. 조건의 중요성
    • 적절한 조건으로 인덱스를 설정하지 않으면 검색 속도가 향상되지 않을 수 있다.

 


📍 인덱스 사용 시 고려사항

  1. 읽기 vs 쓰기 작업의 비율
    • 읽기 작업이 많은 테이블에 적합하며, 쓰기 작업(삽입, 수정, 삭제)이 많은 경우 성능 저하 가능.
  2. 컬럼 선택
    • 검색 빈도가 높은 컬럼에 인덱스를 생성해야 한다.
    • 자주 변경되는 컬럼은 인덱스로 부적합하다.

 


💡 결론

인덱스는 검색 성능을 크게 향상시키는 중요한 기법이지만,
데이터 변경 작업(삽입, 수정, 삭제)이 빈번하거나 인덱스가 적절히 설계되지 않은 경우 오히려 성능 저하를 초래할 수 있다.

반응형