4.5 인덱스

2025. 1. 22. 22:00·SW개발/면접을 위한 CS 전공지식 노트
반응형

4.5.1 인덱스의 필요성

  • 핵심 역할: 원하는 데이터를 빠르게 찾기 위해 사용.

4.5.2 B-트리

  • 인덱스는 보통 B-트리 자료구조를 기반으로 구성.
  • 구조:
    • Root Node: 트리의 최상위 노드.
    • Branch Node: 중간에 위치하는 노드.
    • Leaf Node: 데이터가 실제로 저장된 노드.
  • 특징:
    • 데이터가 커질수록 깊이가 증가.
    • 깊이가 1 증가하면, 최대 인덱스 항목 수가 4배 증가(2의 제곱 꼴로 증가).

4.5.3 인덱스 만드는 방법

MySQL

  1. 클러스터형 인덱스
    • Primary Key 옵션으로 기본키를 생성하면 클러스터형 인덱스가 자동 생성됨.
  2. 세컨더리 인덱스
    • UNIQUE NOT NULL 옵션으로 생성 가능.
    • 특징:
      • 보조 인덱스로 여러 필드 값을 기반으로 쿼리를 최적화.

MongoDB

  1. ObjectID
    • 기본적으로 PK(ObjectID)를 자동 설정.
  2. 세컨더리 인덱스
    • 필요에 따라 부가적으로 설정 가능.
  3. 복합 인덱스
    • 필드 조합으로 복합 인덱스를 설정하여 성능 최적화.

4.5.4 인덱스 최적화 기법

  • 인덱스 생성과 활용은 데이터 구조와 쿼리 특성에 따라 달라지며, 항상 최적화된 방식으로 설계해야 함.
  • 구체적인 최적화 기법은 서비스 특성과 데이터 패턴에 따라 다양하게 적용 가능.

1. 인덱스는 비용이다

  • 인덱스는 데이터를 두 번 탐색하므로 비용이 발생:
    • 탐색 비용: 데이터를 조회할 때 두 번 탐색해야 하므로 비용이 증가.
    • 수정 비용: 데이터 삽입, 수정, 삭제 시, 인덱스 또한 갱신되므로 추가적인 비용 발생.
    • 분산된 데이터: 트리의 높이가 증가하면 탐색 비용 증가.
  • 모든 필드에 무작정 인덱스를 추가하면 오히려 성능 저하를 유발할 수 있음.

2. 항상 테스트하라

  • 인덱스 최적화는 서비스의 데이터 구조와 테이블 크기에 따라 다름.
  • EXPLAIN 명령어:
    • 쿼리 실행 전에 인덱스 사용 계획을 확인하는 데 유용.
    • 테스트를 통해 실제 성능에 영향을 미치는 요소를 파악 후 최적화.

3. 복합 인덱스 생성 순서

  • 복합 인덱스 생성 시 순서가 매우 중요:
    1. 같음(Equal 조건): 비교에서 동일 조건을 먼저 처리할 수 있도록 설정.
    2. 정렬 조건(Order By): 정렬 조건에 사용되는 컬럼을 인덱스에서 우선 처리.
    3. 다중 값 및 범위 조건:
      • 범위 검색(>, <, BETWEEN)에 사용되는 컬럼은 마지막에 설정.
  • 예시:
    • email과 age 필드가 있을 경우:
      • 정렬 기준이 email이라면 먼저 email로 인덱스를 설정.
      • 이후 age 순으로 추가 설정.
반응형
저작자표시 비영리 변경금지 (새창열림)

'SW개발 > 면접을 위한 CS 전공지식 노트' 카테고리의 다른 글

4.7 조인의 원리  (1) 2025.01.22
4.6 조인의 종류  (0) 2025.01.22
4.4 데이터베이스의 종류  (3) 2025.01.22
4.3 트랜잭션과 무결성  (1) 2025.01.21
4.2 ERD와 정규화 과정  (0) 2025.01.21
'SW개발/면접을 위한 CS 전공지식 노트' 카테고리의 다른 글
  • 4.7 조인의 원리
  • 4.6 조인의 종류
  • 4.4 데이터베이스의 종류
  • 4.3 트랜잭션과 무결성
코코도롱
코코도롱
    반응형
  • 코코도롱
    도롱이의 전자공학소
    코코도롱
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • AI (16)
        • 데이터 분석과 모델 학습 (4)
        • 모델별 정리 (7)
        • (PJT)음성 화자 분류 (4)
      • SW개발 (38)
        • C++ (9)
        • 면접을 위한 CS 전공지식 노트 (24)
        • Django+Vue.js (0)
        • 이런저런 개발이야기 (1)
        • 갑자기 C코테를 봐야할때 (2)
        • RPI5 프로젝트 (1)
        • 트러블슈팅 (1)
      • ESG (2)
        • 내가 쓰는 Assay (1)
        • 뉴스 스크랩 (1)
      • 반도체 (4)
        • 반도체 (3)
        • 슬기로운 학부생활 (1)
        • 회로 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    데이터분석 #머신러닝 #딥러닝 #데이터사이언스 #알고리즘 #데이터전처리
    정리본
    홉바이홉
    홉바이홉통신
    ios7계층
    LAN
    CS지식
    운영체제
    공백포함입력받기
    면접을 위한 cs전공지식 노트
    반도체 소자 공학
    전공 지식
    ESG
    word 수식
    데이터전처리 #데이터분석 #딥러닝 #머신러닝 #Pandas #Numpy #Python
    c언어 입출력
    멀티프로세스
    반도체 공학
    데이터분석 #데이터전처리 #결측치 #머신러닝 #딥러닝 #Pandas #DataFrame
    면접을 위한 CS 전공지식 노트
    요약본
    페이징 기법
    파일입출력 #DataFrame불러오기
    보고서 수식
    os구조
    반도체 물성
    입출력관리
    MySQL
    메시지큐
    c io
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코코도롱
4.5 인덱스
상단으로

티스토리툴바