241008 챌린지반 - 인덱스, 검색 방식

LIHA·2024년 10월 8일
0

내일배움캠프

목록 보기
75/108
post-thumbnail
post-custom-banner

인덱스 - 주로 B트리 구조를 쓴다

  • Clustered Index - 정렬이 되어 있는 것
  • Non-Clustered Index - 쪼끔 짜치는 친구
    인덱스 페이지와 데이터 페이지가 구분되어 있다.
    -> 인덱스로 구성한 컬럼은 정렬이 된다. 그런데 실제로 데이터 페이지는 정렬되지 않았다.
    포인터처럼 가리키고 있고 값을 직접 담고 있는게 아니기 때문에

3대장 말고 3약체 정렬을 아는가? 시간복잡도가 O(N²) 인 애들

일단 버블소트는 무조건 들어가는거 같고.

검색 방식

  • Table Full Scan
    -> 테이블의 모든 레코드를 순차적으로 검색하는 방식
    -> 보통 인덱스가 없을때 풀스캔이 일어난다
    -> 혹은 쿼리 옵티마이저가 인덱스를 사용하지 않는 것이 더 효율적이라고 판단했을 때
    -> 일반적으로 테이블 규모가 조금만 커져도 성능이 최악인 방식

  • Index Unique Scan
    -> 유니크 인덱스 (클러스터드 or 논클러스터드)를 사용하여 검색하는 방식
    -> WHERE id = 3 과 같은 쿼리에서 쓰이는 방식이라고 생각하면 된다
    -> 특정 값에 대해 정확히 하나의 레코드를 찾을때 사용. 찾으면 바로 그 순간 검색 종료!
    -> 항상 효율적인 스캔방식

  • Index Range Scan
    -> 인덱스의 특정 범위 내에서 검색을 수행할 때 사용하는 방식

인덱스가 항상 최선은 아니다 - 인덱스의 단점

  1. 인덱스를 위한 추가 저장공간이 필요
  2. 데이터 삽입, 수정, 삭제 시 인덱스 업데이트로 인한 오버헤드가 발생!
  3. 너무 많은 인덱스는 오히려 성능을 저하시킬 수도...

Selectivity라는 걸 아는가? 분포도가 안좋으면 인덱스는 쓰나마나

인덱스를 설정할 때는 Selectivity가 충분히 좋은지 보고 인덱스를 설정해야 한다.
그렇지 않으면 인덱스를 설정하지 않은 것 만 못하니 주의하자!

인덱스 사용 시 주의사항

  • 검색 결과
profile
갑자기 왜 춤춰?
post-custom-banner

0개의 댓글