Index

uuuouuo·2022년 8월 17일
0

📖 인덱스


  • 테이블의 칼럼을 색인화하여 정렬을 통해 검색 속도 향상시키기 위해 사용
  • DBMS는 데이터베이스 테이블의 모든 데이터를 검색하여 원하는 결과를 얻기 위해선 시간이 오래 걸림
  • 그래서 칼럼 값과 해당 레코드가 저장된 주소를 키와 값의 쌍으로 인덱스를 만듬

인덱스를 이용하면 항상 좋을까?

  • DBMS의 인덱스는 항상 정렬 상태를 유지하기 때문에 원하는 값을 탐색하는데 빠름
  • 하지만 새로운 값을 추가, 삭제, 수정할 경우 쿼리문 실행 속도 느려짐
  • 즉, 인덱스는 데이터 저장 성능을 희생하고 대신 데이터 읽기 속도를 높임

인덱스 설정이 없는 테이블의 경우는?

  • 기본적으로 PK값이 인덱스로 설정됨

💬 데이터 베이스의 인덱스 자료구조


◾ B+ - Tree 인덱스 알고리즘

  • 일반적으로 사용되는 인덱스 알고리즘
  • 칼럼의 값을 변형하지 않고(사실 값의 앞부분만 잘라서 관리) 원래 값을 이용해 인덱싱

◾ Hash 인덱스 알고리즘

  • 해시 값을 계산해 인덱싱하는 알고리즘
  • 매우 빠른 검색 지원
  • 하지만 값을 변형해 인덱싱해서 일부만 일치하는 값을 검색하고자 할 때 해시 인덱스 사용 불가
  • 주로 메모리 기반 데이터베이스에서 사용

왜 B - Tree를 사용할까

  • 데이터 접근 시간복잡도가 O(1)인 해시 테이블이 효율적이여 보이지만, SELECT 질의 조건에 부등호(<>) 연산이 포함
  • 해시 테이블을 사용하면, 등호(=)연산이 아닌 부등호 연산의 경우 문제 발생

💬 인덱스 성능과 고려사항


모든 칼럼에 인덱싱하면 빨라지는 것인가

  • 대답은 NO
  • 삽입, 삭제, 갱신 쿼리문 실행 시 별도의 과정 추가
  • 삭제의 경우, 삭제하지 않고 사용 안함 표시로 남음
  • 즉, row의 수는 그대로
    • 이렇게 되면 실제 데이터는 10만건인데 데이터가 100만건 있는 결과를 낳음
  • 갱신의 경우는 삭제의 문제점 동시 수반
    • 데이터 삭제 후 새 데이터 오는 개념이기 때문

⭐ 즉, 인덱스는 검색을 많이 필요로하는 테이블에 사용하는 것이 좋음

0개의 댓글